理解Promise构造函数

时间:2016-04-13 09:01:47

标签: javascript promise

我是Promises的新手,我正在尝试理解Promise构造函数。根据{{​​3}},可以使用Promise.resolve来解决可能是承诺的事情,例如

var maybePromise = Math.random() > 0.5 ? 10 : Promise.resolve(10);
var definitelyPromise = Promise.resolve(maybePromise);

Promise.resolve相当于( case1 ):

var definitelyPromise = new Promise(function (fulfill, reject) {
  if (isPromise(maybePromise)) {
    maybePromise.then(fulfill, reject);
  } else {
    fulfill(maybePromise);
  }
});

我想知道这是否也等同于( case2 ):

var definitelyPromise3 = new Promise(function(fulfill, reject) {
  if (maybePromise instanceof Promise) {
    fulfill(maybePromise);
  } else {
    fulfill(maybePromise);
  }
});

(当然可以删除if...else...,因为我在两种情况下都会调用fulfill(maybePromise)

这是promisejs.org

1 个答案:

答案 0 :(得分:3)

实际上,promise构造函数回调的第一个参数称为resolve,而不是fulfill

当您将promise or thenable传递给resolve时,其状态将被采用,所有其他值fulfill直接承诺。这意味着您所描述的逻辑恰好在resolve内实现 - 并且正如您所说,您不需要解析器回调中的条件。

事实上,standard specifies Promise.resolve的实施非常像

function resolve(x) {
    return new Promise(function(resolve, reject) {
        resolve(x);
    });
}