【问题标题】:"Waiting" on either a promise or regular object using native(ES6) JavaScript promises使用原生(ES6)JavaScript 承诺在承诺或常规对象上“等待”
【发布时间】:2016-10-16 02:58:18
【问题描述】:

几年前我使用 jQuery 或 Q 玩过几次 Promise。我现在已经很生疏了,想学习和使用新的原生 ES6 Promise。

我似乎记得一个简洁的概念,您可以“等待”某事而不关心它是普通对象还是承诺。如果它是一个承诺,则在异步完成时调用回调,如果是其他任何东西,则立即调用回调 - 可能是下一个滴答声。

但我不记得这是怎么做到的。我不确定它是否有名称,因此 Google 很难找到它。我不确定它是否是所有 JS 承诺实现的标准功能,或者它只是 jQuery 有的东西。

这叫什么?我还能用原生承诺做到这一点吗?我在哪里可以阅读它?

【问题讨论】:

  • 这似乎与jQuery的.when()有关,它可能与Promise.all()相似也可能不相似...
  • 可能是Promise.resolve(x)?如果你给它一个promise,它只会返回promise,但是如果你给它其他任何东西,它会返回一个立即履行的带有该值的promise。
  • @AgentME:啊,也许吧。听起来这是 jQuery Promise 和 native 之间不同的另一件事。他们已经使我的大脑有些弯曲,但差异使我的大脑变得更糟\-:
  • 似乎both jQuery.when() and Promise.all() 采用了一个数组,其元素可以是一个promise,也可以是一个普通的对象/值。我大概就是这么想的。但由于我仍在玩它,真正了解其中内容的人可能会发布答案,我不会自己回答。

标签: javascript promise ecmascript-6 terminology


【解决方案1】:

jQuery 的 $.when() 和 ES6 的 Promise.all() 都表现出您所指的行为。提供一个promise,函数等待promise解决,但对于任何其他值,它会立即返回。

【讨论】:

  • 值得注意的是Promise.all()只会接受一个可迭代对象(例如一个数组),并同时执行可迭代对象中的每个promise。 Promise.resolve()(由 Promise.all() 在后台使用)更像是 jQuery 的 $.when(),如果你只用一个对象调用它。
  • 也就是说$.when(x)大致相当于Promise.resolve(x)$.when(x, y, z)大致相当于Promise.all([x, y, z])
猜你喜欢
  • 2020-10-31
  • 2018-08-27
  • 2017-12-08
  • 1970-01-01
  • 2013-09-16
  • 2016-11-29
  • 2019-06-30
  • 2019-04-29
  • 1970-01-01
相关资源
最近更新 更多