Условный / динамический массив обещают все


У меня есть функция с массивом обещаний, который может иметь от 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 2

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));