2016-12-06 129 views
0

后有以下代码Promise.all()我Promise.then()返回未定义值

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上运行它,所以它在技术上使用原生的chrome实现承诺。

+3

你的链接工作正常。你传递给'then'的函数没有返回任何东西(相当于'undefined'),所以这就是你所得到的。如果你想传递值,你需要明确地做。 –

回答

2

您的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

pOnepTwo必须决心一个值,以便该值传递给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在这种情况下被任何先前的承诺与决心,或者在这种情况下,false

现在,对pTwo承诺一样。

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

同样,我们必须为了返回从.then回调函数的值的承诺,以解决与价值,而不是不确定的。

现在,Promise.all将运行Promises,并且在他们解决(在我们的情况下他们总是这样做)的时候(或者如果),它将从每个人得到解析的值,并且Promise.all承诺本身将去解析与价值。