2017-04-26 2 views
-1

Mit node.js Version 7.7.2, würde ich gerne eine asynchrone Funktion und dann eine andere Funktion ausführen, sobald die erste Funktion wie folgt abgeschlossen ist:dann() Callback Feuern vor Versprechen ist in node.js gelöst

function foo() { 
 
    return new Promise(function(resolve, reject) { 
 
    // Do some async stuff 
 
    console.log('foo is about to resolve'); 
 
    resolve(); 
 
    }); 
 
} 
 
    
 
function bar(arg) { 
 
    console.log(arg); 
 
} 
 

 
foo().then(bar('bar has fired'));

Das Problem ist, dass dieses Setup druckt, gefolgt von 'bar hat gefeuert' 'foo ist etwa zu lösen'. Was ich erwarte, ist, dass die Bar auf das Feuer warten wird, bis das Versprechen, das von foo zurückgegeben wurde, gelöst ist. Missverstehe ich, wie then() Callbacks in der Ereignisschleife von node.js in die Warteschlange stellt?

Dank

+1

weil Sie bar fordern .... und die Zuordnung, was es mit dem dann zurück. – epascarello

+1

Haben Sie es versucht, ohne Balken explizit aufzurufen (aka entfernen Sie das '()')? – larz

+1

Wenn Sie 'x (y())' haben, wird 'y' als * first * bezeichnet und sein Rückgabewert wird an' x' übergeben. Das hat nichts mit '.then', Versprechungen oder Ereignisschleifen zu tun. Argumente werden * immer * eifrig ausgewertet. –

Antwort

0

Wie in einem Kommentar erwähnt, eine Funktion zu übergeben, die then, wenn sie aufgerufen wird, bar mit params nennen.

function foo() { 
 
    return new Promise(function(resolve, reject) { 
 
    // Do some async stuff 
 
    console.log('foo is about to resolve'); 
 
    resolve(); 
 
    }); 
 
} 
 
    
 
function bar(arg) { 
 
    console.log(arg); 
 
} 
 

 
foo().then(function(){bar('bar has fired')});

Verwandte Themen