По умолчанию функция 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]
(может быть исправлено с помощью jib-ответа ниже) - Невозможно использовать в динамическом контексте:
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 */
});