#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 я редактирую свой вопрос, чтобы включить соответствующий код