Javascript Promise.all()在Promise.then()之后返回未定义的值
我有以下代码Javascript Promise.all()在Promise.then()之后返回未定义的值,javascript,promise,Javascript,Promise,我有以下代码 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(){
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(值)
在控制台中显示[未定义,未定义]
。我对promises的理解是,我应该能够链接then()
方法。链接不适用于Promise.all()
,或者这是一个bug
注意:我使用的是,但它是在chrome上运行的,所以从技术上讲,它使用的是原生chrome实现的承诺 您的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);
});
你的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);
});
pOne
和pTwo
必须用一个值解析,以便将该值传递给承诺的结果。所有
var pOne = new Promise(function(callback){
setTimeout(function(){
callback(false);
}, 100);
}).then(function(v){
console.log("pOne: " + v);
return v;
});
注意内的返回v
。然后回调。这意味着pOne
承诺将用该值解决(v
在本例中为先前承诺的值,或者在本例中为false
)
现在对pTwo
promise执行相同的操作
var pTwo = new Promise(function(callback){
setTimeout(function(){
callback(true);
}, 100);
}).then(function(v){
console.log("pTwo: " + v);
return v;
});
同样,我们必须从回调函数返回一个值,然后
回调函数才能使用值而不是未定义的值解析承诺
现在,Promise.all
将运行承诺,以及承诺何时(或是否)解决(在我们的案例中,承诺总是会解决),它将从每一个中获得已解析的值,以及承诺。所有承诺本身将用值解析。pOne
和pTwo
必须用值解析才能将该值传递给承诺的结果。所有
var pOne = new Promise(function(callback){
setTimeout(function(){
callback(false);
}, 100);
}).then(function(v){
console.log("pOne: " + v);
return v;
});
请注意中的返回v
。然后
回调。这意味着pOne
承诺将使用该值解析(v
在本例中是先前承诺的解析值,或者在本例中是false
)
现在对pTwo
promise执行相同的操作
var pTwo = new Promise(function(callback){
setTimeout(function(){
callback(true);
}, 100);
}).then(function(v){
console.log("pTwo: " + v);
return v;
});
同样,我们必须从回调函数返回一个值,然后
回调函数才能使用值而不是未定义的值解析承诺
现在,Promise.all
将运行承诺,以及承诺何时(或是否)解决(在我们的案例中,承诺总是会解决),它将从每个函数中获得已解析的值,以及承诺。所有承诺本身都将用这些值解析。您的链接工作正常。然后传递到的函数将不返回任何内容(相当于未定义的),这就是您得到的结果。如果您想传递需要显式传递的值,则需要显式传递。您的链接工作正常。您传递到的函数没有返回任何内容(相当于未定义的),因此这就是您得到的结果。如果您想传递值,则需要显式传递。