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
将运行承诺,以及承诺何时(或是否)解决(在我们的案例中,承诺总是会解决),它将从每个函数中获得已解析的值,以及
承诺。所有
承诺本身都将用这些值解析

您的链接工作正常。然后传递到
的函数将不返回任何内容(相当于
未定义的
),这就是您得到的结果。如果您想传递需要显式传递的值,则需要显式传递。您的链接工作正常。您传递到
的函数没有返回任何内容(相当于
未定义的
),因此这就是您得到的结果。如果您想传递值,则需要显式传递。