Kon*_*nel 7 javascript promise ecmascript-6 es6-promise
有人可以向我解释为什么d立即解决下面代码中的结果promise()?
//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());
Run Code Online (Sandbox Code Playgroud)
我创建永远未决承诺的阵列,因此所得到的承诺应等待所有后续承诺到结束也永远挂起(这里所提出).我已经使用了一段时间的承诺,但我在这里显然遗漏了一些东西.
Ami*_*mit 10
then不Promise作为输入,它需要2个函数,1个用于履行,1个用于拒绝.
d解决的原因是由于调用.then具有不可调用的值(甚至数字文字-1或者undefined)会导致onFulfilled函数被"Identity"替换,而"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());
Run Code Online (Sandbox Code Playgroud)
或者......
//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());
Run Code Online (Sandbox Code Playgroud)
既然你正在使用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());
Run Code Online (Sandbox Code Playgroud)