【问题标题】:then() callback firing before promise is resolved in node.js [duplicate]在node.js中解决promise之前的then()回调触发[重复]
【发布时间】: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


【解决方案1】:

如评论中所述,将函数传递给then,当调用该函数时,将使用您的参数调用bar

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')});

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2021-09-14
    • 2017-10-08
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多