Ihr Export kann nicht funktionieren, da er sich außerhalb der Funktion befindet, während sich die foo
Deklaration innerhalb befindet. Wenn Sie den Export jedoch in das Modul einfügen, können Sie nicht sicher sein, ob der Export definiert wurde.
Der beste Weg, um mit einem Ansync-System zu arbeiten, ist die Verwendung eines Rückrufs. Sie müssen eine Rückrufzuweisungsmethode exportieren, um den Rückruf zu erhalten, und ihn bei der asynchronen Ausführung aufrufen.
Beispiel:
var foo, callback;
async.function(function(response) {
foo = "foobar";
if( typeof callback == 'function' ){
callback(foo);
}
});
module.exports = function(cb){
if(typeof foo != 'undefined'){
cb(foo);
} else {
callback = cb;
}
}
Hier async.function
ist nur ein Platzhalter, um einen asynchronen Aufruf zu symbolisieren.
In der Hauptsache
var fooMod = require('./foo.js');
fooMod(function(foo){
});
Mehrfacher Rückrufweg
Wenn Ihr Modul mehrmals aufgerufen werden muss, müssen Sie ein Array von Rückrufen verwalten:
var foo, callbackList = [];
async.function(function(response) {
foo = "foobar";
for(var i = 0; i < callbackList.length; i++){
callbackList[i](foo)
}
});
module.exports = function(cb){
if(typeof foo != 'undefined'){
cb(foo);
} else {
callback.push(cb);
}
}
Hier async.function
ist nur ein Platzhalter, um einen asynchronen Aufruf zu symbolisieren.
In der Hauptsache
var fooMod = require('./foo.js');
fooMod(function(foo){
});
Versprich Weg
Sie können Promise auch verwenden, um das zu lösen. Diese Methode unterstützt mehrere Aufrufe durch das Design des Versprechens:
var foo, callback;
module.exports = new Promise(function(resolve, reject){
async.function(function(response) {
foo = "foobar"
resolve(foo);
});
});
Hier async.function
ist nur ein Platzhalter, um einen asynchronen Aufruf zu symbolisieren.
In der Hauptsache
var fooMod = require('./foo.js').then(function(foo){
});
Siehe Promise-Dokumentation