2016-12-06 132 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承諾本身將去解析與價值。