Promise.resolve(promise)的用例是什么?

时间:2016-08-04 17:39:32

标签: javascript es6-promise

我们可以拨打Promise.resolve(value)以及Promise.resolve(promise)。我可以理解我应该在哪里以及如何使用第一个电话,但我不确定第二个电话。

为什么不首先简单地使用promise作为参数?我的意思是打电话:

  

promise1.then()

而不是:

  

Promise.resolve(promise1)。然后()

3 个答案:

答案 0 :(得分:6)

Promise.resolve基本上是“我不在乎这是什么,给我一个承诺”。一般来说,每当你得到一个可能是一个承诺Promise.resolve的论证时,就是使用它的正确方法(相对于检测它是一个笨拙的承诺)。

对以下内容有用:

  • 使用来自不同图书馆的外国承诺。
  • 使用可能是承诺的值,可能是普通值。

隐含地通过承诺大量调用。

  • 当你传递一系列混合承诺时,外国的“theables”和值为Promise.allPromise.race - 它隐含Promise.resolve所有值。
  • 同样,当您返回外国“可以”或来自Promise#then(...)的值时,它会在其上调用Promise.resolve
  • 当您await隐含地调用了值Promise.resolve时。

等等。

答案 1 :(得分:3)

如果您的可能是承诺的值,Promise.resolve就很棒。

在我正在进行的程序中,我有很多地方可以创建一个带有回调的UI组件来处理各种输入。有时,那些回调需要返回承诺,有时则不会。我总是将返回值包装在Promise.resolve并且繁荣,解决了问题,而不是把责任放在回调上。

答案 2 :(得分:3)

如果promise1确实是一个Promise,那么如果Promise是例如,则此构造可能用于将转换从一个Promise转换为另一个Promise中的另一个。定义为var Promise = require('bluebird');

例如如果您使用旧版本的jQuery,其中从函数返回的Deferred对象的行为不符合ES6的承诺,则非常有用。

或者,如果您想将本机ES6 Promise与像bluebrid这样具有更多功能的库一起使用。