Цикл массива асинхронных функций без метода Promise.all()

#javascript #asynchronous #async-await #es6-promise

Вопрос:

Существует массив с объектами [{ некоторые конфигурации }, { некоторые конфигурации } … ]; , для каждого элемента массива я хочу вызвать асинхронную функцию, которая выполняется каждые 1 секунду (в идеале с помощью setTimoute или setInterval ) независимо от других запущенных функций. Поэтому, если в одной из асинхронных функций возникает ошибка, остальные не завершаются, а продолжают выполняться каждую секунду .Метод Promise.all() действительно помогает мне решить вышеуказанную проблему, поэтому не могли бы вы предложить мне какой-нибудь способ ее решения?

 const array = [ { some configurations }, { some configurations}];
const intervalIds = array.map(() => null);

async function startAsyncFunction(index, params){
  connectMethod(params, async (err) => {
    if(error){
      // retry connect and run every second
      clearInterval(intervalIds[index]);
      intervalIds[i] = setInterval(() => {
        await startAsyncFunction(index, params)
      }, 1000);
    }
    // do some other stuff
  })
} 

async function startLooping(){
  for(let i = 0; i<= array.length -1; i  ){
    const params = array[i] || {};
    intervalIds[i] = setInterval(() => {
      await startAsyncFunction(i, params)
    }, 1000);
  }
}

startLooping();
 

Комментарии:

1. Promise.allSettled() ?

2. И проблема/вопрос в том, что? И что вы до сих пор пытались решить самостоятельно?

3. Используйте обещание.Все решено. Покажите больше вашего кода.

4. «вызовите асинхронную функцию, которая выполняется каждые 1 секунду» , которой не нравится то, что обещает помочь вам. Или вы имеете в виду, что каждую секунду вы выполняете асинхронную функцию для всех объектов? (хотя это тоже кажется странным) Здесь важен порядок вещей.

5. @Andreas я редактирую свой вопрос, чтобы включить соответствующий код