2016-12-06 11 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上で実行しているため、技術的には約束のネイティブクローム実装を使用しています。

+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

pOnepTwoPromise.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が前の約束をして解決どんなものか、この場合は、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の約束はになります。その価値。