Условный / динамический массив обещают все
У меня есть функция с массивом обещаний, который может иметь от 1 до X обещаний.
Эти обещания входят в массив, основанный на условных числах.
Я хочу быть в состоянии отличить, из какого API приходит каждый результат, и я не могу реализовать чистый способ сделать это
let promises = [];
if (false) {
let promise1 = request(toUrl);
promises.push(promise1);
}
if (true) {
let promise2 = request(toUrl);
promises.push(promise2);
}
if (false) {
let promise3 = request(toUrl);
promises.push(promise3);
}
if (true) {
let promise4 = request(toUrl);
promises.push(promise4);
}
try {
let result = await Promise.all(promises);
} catch (error) {
console.log(error);
}
Итак, если все идет хорошо, результатом будет массив результатов. Не зная, какое из условий истинно, как я узнаю, является ли результат [0] результатом promise1, promise2 или promise3?
1 ответ:
Вы можете просто добавить к ответу вашего
request(url)
еще одну информацию об обещании, напримерconst promise1 = request(url).then(res => ({ res: res, promise: 'prmoise1' }))
И на
Promise.all()
вы получите значения обещаний в приведенной выше форме и сможете определить, какие обещания были выполнены.Пример
const promises = []; if(true) { const promise1 = fetch('https://jsonplaceholder.typicode.com/posts/1').then(res => ({ res: res, promise: 'promise1' })); promises.push(promise1); } if(false) { const promise2 = fetch('https://jsonplaceholder.typicode.com/posts/2').then(res => ({ res: res, promise: 'promise2' })); promises.push(promise2); } Promise.all(promises).then(res => console.log(res));