我是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)
。
答案 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);
});
}