【发布时间】:2017-09-24 10:46:21
【问题描述】:
使用 node.js 版本 7.7.2,我想执行一个异步函数,然后在第一个函数完成后执行另一个函数,如下所示:
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'));
问题是这个设置打印了“bar has fire”,然后是“foo is about to resolve”。我期望的是 bar 将等待触发,直到 foo 返回的承诺得到解决。我是否误解 then() 如何在 node.js 事件循环中对回调进行排队?
谢谢
【问题讨论】:
-
因为您正在调用 bar....并将其返回的内容分配给 then。
-
你试过没有明确调用 bar 吗(又名删除
())? -
只要你有
x(y()),y就会被调用first并且它的返回值被传递给x。这与.then、承诺或事件循环无关。参数总是被热切地评估。 -
明白了。如果我想将参数传递给 bar 怎么办?这是否使 bar 不再立即被调用?我会更新问题以反映这一点,因为它更能代表我遇到的问题。
-
.then需要一个函数,因此在这种情况下,您传递一个调用bar的函数,其参数为:.then(() => bar('bar has fired'))
标签: javascript node.js ecmascript-6