繁体   English   中英

Promise.then()之后的Promise.all()返回未定义的值

[英]Promise.all() after Promise.then() returning undefined values

我有以下代码

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] 我对promise的理解是,我应该能够链接then()方法。 链接是否不适用于Promise.all()或这是一个错误。

注意:我使用的是promise-polyfill,但是在chrome上运行,因此从技术上讲,它是使用promise的本机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);
});

pOnepTwo必须使用一个值进行解析 ,以便将该值传递给Promise.all的结果。

var pOne = new Promise(function(callback){
    setTimeout(function(){
        callback(false);
    }, 100);
}).then(function(v){
    console.log("pOne: " + v);
    return v;
});

注意.then回调内部的return v 这意味着pOne承诺将使用该值进行解析 (在这种情况下, v是先前的Promise解析为的值,或者在这种情况下为false

现在对pTwo许诺做同样的pTwo

var pTwo = new Promise(function(callback){
    setTimeout(function(){
        callback(true);
    }, 100);
}).then(function(v){
    console.log("pTwo: " + v);
    return v;
});

同样,我们必须从.then回调函数返回一个值,以便Promise用一个值而不是未定义的值进行解析。

现在, Promise.all将运行Promises,并且当(或如果)他们解决(在我们的情况下,他们总是这样做),它将从每个解决方案中获取已解决的价值,而Promise.all承诺本身将用值解决

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM