我有以下代码
var pOne = new Promise(function(callback){
setTimeout(function(){
callback(false);
}, 100);
}).then(function(v){
console.log("pOne: " + v);
});
var pTwo = new Promise(function(callback){
setTimeout(function(){
callback(true);
}, 100);
}).then(function(v){
console.log("pTwo: " + v);
});
Promise.all([pOne, pTwo]).then(function(values){
console.log(values);
});
console.log(values)
在控制台中显示[undefined, undefined]
。我对承诺的理解是我应该能够链接then()
方法。链接不适用于Promise.all()
或者这是一个错误。
注意:我使用promise-polyfill但是在chrome上运行它,所以从技术上讲,它使用的是promises的原生chrome实现。
答案 0 :(得分:3)
你的pOne和pTwo承诺不会退货。
试试这个:
var pOne = new Promise(function(callback){
setTimeout(callback, 100, true);
}).then(function(v){
return v;
});
var pTwo = new Promise(function(callback){
setTimeout(callback, 100, false);
}).then(function(v){
return v;
});
Promise.all([pOne, pTwo]).then(function(values){
console.log(values);
});
答案 1 :(得分:1)
pOne
和pTwo
必须解决一个值才能将该值传递给Promise.all
的结果。
var pOne = new Promise(function(callback){
setTimeout(function(){
callback(false);
}, 100);
}).then(function(v){
console.log("pOne: " + v);
return v;
});
请注意return v
回调中的.then
。这意味着pOne
承诺将使用该值解决(v
在这种情况下是先前Promise解决的任何内容,或者在这种情况下{{1} }。
现在为false
承诺做同样的事情。
pTwo
同样,我们必须从var pTwo = new Promise(function(callback){
setTimeout(function(){
callback(true);
}, 100);
}).then(function(v){
console.log("pTwo: " + v);
return v;
});
回调函数返回一个值,以便Promise使用值解析,而不是使用undefined。
现在,.then
将运行Promises,当他们(或者如果)他们解决时(在我们的情况下他们总是这样做),它会得到解决每个值的值,Promise.all
承诺本身将使用值解决。