默認情況下,Promise.All([])函數返回一個基於數字的索引數組,其中包含每個承諾的結果。最好的es6方法,以Promise.all獲取基於名稱的結果
var promises = [];
promises.push(myFuncAsync1()); //returns 1
promises.push(myFuncAsync1()); //returns 2
Promise.all(promises).then((results)=>{
//results = [0,1]
}
什麼是最好的方式香草返回的結果與Promise.all命名指數()?
我試圖用一個地圖,但它以數組形式返回的結果是這樣的: [key1, value1, key2, value2]
UPDATE:
我的問題,似乎都不清楚,這是爲什麼我不喜歡訂購基於指數:
- 這是蹩腳保持:如果添加在你的代碼中承諾你可能不得不重寫整個結果函數,因爲索引可能有變化。
- 這太可怕了閱讀:
results[42]
(可以是固定下面臂架的答案) - 在動力方面不是真的有用:
var promises = [];
if(...)
promises.push(...);
else{
[...].forEach(... => {
if(...)
promises.push(...);
else
[...].forEach(... => {
promises.push(...);
});
});
}
Promise.all(promises).then((resultsArr)=>{
/*Here i am basically fucked without clear named results
that dont rely on promises' ordering in the array */
});
我不認爲你可以或應該?通過「命名」,我假定你的意思是一個帶有鍵和值的對象,這些鍵是什麼,以及你期望得到什麼? – adeneo
許多類似RSVP的庫都實現了散列方法。您可能需要另一個數組,如['myFuncAsync1','myFuncAsync2']。然後映射結果如Promise.all(承諾)。然後((結果)=>){var} = results.forEach((result,index)=> { = result; }); return temp; } .then(result => {}) – blessenm
太糟糕了,它不像你可以做的jQuery承諾 $ .when(deffered1,deffered2).done(function(result1 ,result2){...}) – phenxd