首页 > 解决方案 > Promise.any() 和 Promise.first() 有什么区别?

问题描述

它们看起来几乎相同,但有不同的描述,例如在 You Don't Know JS 一书中

他们不是都试图获得第一个解决的答案(或得到第一个成功解决的通知),而不关心任何拒绝吗?

标签: promise

解决方案


您参考的文章提供了一个实现,.first()它还提供了.any()和的定义.first()

  • any([ .. ])就像all([ .. ]),但它忽略任何拒绝,因此只需要完成一个而不是全部。
  • first([ .. ])就像与 的比赛any([ .. ]),即它忽略任何拒绝并在第一个 Promise 完成后立即完成。

这个定义any似乎与EcmaScript目前处于第 3 阶段的定义不同。引用的定义any似乎在等待所有的承诺得到解决。返回的承诺只有在所有这些都被拒绝时才会被拒绝,但如果至少有一个承诺被履行,则将履行 - 忽略拒绝。

“所以只需要满足一个而不是全部满足”这句话有点令人困惑,但与结果的比较.all()不是关于结果何时确定,而是在什么条件下它将满足


推荐阅读