有人可以向我解释为什么下面代码中产生的 promise (d
) 会立即得到解决吗?
//promises that are never resolved nor rejected
var a = new Promise(function(r,re){});
var b = new Promise(function(r,re){});
var c = new Promise(function(r,re){});
var d = [a, b, c].reduce(function (previousPromise, promise) {
return previousPromise.then(promise);
}, Promise.resolve());
我正在创建一组永远悬而未决的 promise ,因此生成的 promise 也应该永远悬而未决,因为它会等待所有后续 promise 完成 ( as presented here )。我已经使用 promises 一段时间了,但我显然在这里遗漏了一些东西。
最佳答案
then
没有将 Promise
作为输入,它需要 2 个函数,1 个用于实现,1 个用于拒绝。
d
被解析的原因是调用 .then 时使用不可调用的值(即使是数字文字 - 1,或 undefined
)会导致onFulfilled 函数将替换为“Identity”,它简单地用上一步中解析的任何值重新实现。参见 PerformPromiseThen
像这样尝试:
//promises that are never resolved nor rejected
var a = function() { return new Promise(function(r,re){}); };
var b = function() { return new Promise(function(r,re){}); };
var c = function() { return new Promise(function(r,re){}); };
// or simply, a = b = c after setting the function for c
var d = [a, b, c].reduce(function (previousPromise, fn) {
return previousPromise.then(fn, /* not passing a rejection handler... */);
}, Promise.resolve());
或者……
//promises that are never resolved nor rejected
var a = new Promise(function(r,re){});
var b = new Promise(function(r,re){});
var c = new Promise(function(r,re){});
var d = [a, b, c].reduce(function (previousPromise, promise) {
return previousPromise.then(function() {return promise;});
}, Promise.resolve());
因为你使用的是 promises 和 ES6,你可以更简洁:
let a = new Promise(() => {});
let b = new Promise(() => {});
let c = new Promise(() => {});
let d = [a, b, c].reduce((previousPromise, promise) =>
previousPromise.then(() => promise),
Promise.resolve());
关于javascript - 为什么这个 promise 链会立即解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32067760/