【问题标题】:Thenables in Promise.all (ES6 and Bluebird)Promise.all 中的 thenables(ES6 和 Bluebird)
【发布时间】:2016-11-13 20:18:22
【问题描述】:

这个安全装置有必要吗?

Promise.all([...].map((thenable) => Promise.resolve(thenable)));

是否可以安全地为收集方法提供 thenables - Promise.allPromise.race 等?有什么陷阱吗?

问题涉及 Bluebird,以及 polyfill 和所有原生 ES6 Promise 实现。

【问题讨论】:

  • 您可以在传递给 Promise.all() 的迭代中提供任何 thenable 或值。您不必自己将它们包装成承诺。 Promise.all() 的实现将测试它们是否是 thenable,如果是,则等待它们的解析,如果不是,则值将是解析。查看演示:jsfiddle.net/jfriend00/jgf0xwhm

标签: javascript promise bluebird es6-promise


【解决方案1】:

这不是必需的,应该由 Promise 实现本身来完成:

all 函数返回一个新的承诺,该承诺通过 传递的承诺的履行值数组,或拒绝 第一个通过的承诺拒绝的原因。 解决所有问题 运行时传递的可迭代到 promise 的元素 算法。

ES2015 Specification, paragraph 25.4.4.1 Promise.all ( iterable )

措辞更容易理解by MDN

如果在可迭代数组中传递的东西不是一个承诺,它会被Promise.resolve 转换为一个承诺。

【讨论】:

  • 谢谢。我想这同样适用于蓝鸟。我对 Promise 和 thenable 类型在 Bluebird docs 中可以互换使用这一事实感到困惑,并且没有提到 thenables/promise-likes。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多