Так что мне нужно сделать что-то вроде:
promiseFunction1().then((result) => {
}).catch((err) => {
// handle err
});
promiseFunction2().then((result) => {
}).catch((err) => {
// handle err
});
....
promiseFunctionN().then((result) => {
}).catch((err) => {
// handle err
});
// WAIT FOR BOTH PROMISES TO FINISH
functionWhenAllPromisesFinished();
Я не могу использовать Promise.all
, так как НЕ УХОДУ, ЕСЛИ ОДИН или ВСЕ ИМ НЕ УДАЛ. Я должен быть уверен, что ВСЕ обещания выполнены. Кроме того, функции обратного вызова в then()
являются уникальными для каждого из promiseFunctionX()
.
Я уверен, что это несколько тривиально, но я не могу понять это. Моя первоначальная идея состояла в том, чтобы держать счетчик в верхней области выполнения обещаний и увеличивать его при запуске и уменьшать его в finally()
. Тогда мне понадобится немного async function checkIfRunningPromisesAre0()
, но я тоже не уверен, как это реализовать, так как это выглядело как ад рекурсии.
Вот мой пример, но рассмотрим просто материал, чтобы посмеяться над плохой реализацией:
async function RunningPromisesFinished(){
if(RunningPromises > 0){
await sleep(2000);
return await RunningPromisesFinished();
}else{
return true;
}
}
поверх этого идентификатора должен быть реализован async function sleep(N)
, и через несколько секунд уровень рекурсии будет высоким, что, безусловно, не подходит для оперативной памяти.