【问题标题】:Return after all promises resolved [duplicate]在所有承诺解决后返回[重复]
【发布时间】:2016-07-05 10:26:21
【问题描述】:

下面有一个代码示例,我想在所有承诺解决后从“主”函数返回 baz 变量。

exports.foo = function(bar) {

    var baz;

    // some kind of promises are here forming array of promises p
    // some of promises may change the baz variable

    Promise.all(p).then(() => {
      // returning expression for main function is here
      // return baz here // does not work
    });

    // return baz //cannot be done because it would be earlier than all the async promises are resolved
}

【问题讨论】:

  • foo() 不返回任何内容。您必须返回 Promise.all.then 并在调用者方法中处理承诺。
  • 最好将 promise 链解析为 baz 并继续在 promise 链中工作。
  • 有人告诉我这只是因为伪代码编写,但它非常至关重要:它实际上是return Promise.all(p).then(() => {吗?没有return,它总是会返回未定义的。
  • 一个重要的事情是,你不能从一个执行异步活动的函数同步返回值
  • 只为baz返回一个承诺! return Promise.all(…).then(…);

标签: javascript node.js return promise es6-promise


【解决方案1】:

Promises resolve after main 返回,所以返回一个 baz 的 promise:

exports.foo = function(bar) {
  var baz;
  return Promise.all(p).then(() => baz);
}

exports.foo(3).then(baz => console.log(baz)).catch(e => console.error(e));

【讨论】:

  • 哦天啊……如此简单而优雅。这整个 javascript promise/async/wait 让我有点疯狂,来自 vanilla Java 开发背景。
猜你喜欢
  • 2019-10-01
  • 2017-08-03
  • 2016-01-10
  • 1970-01-01
  • 2016-08-19
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多