Для ожидания того, чтобы не ждать окончания цикла - TypeScript/JavaScript

В моей программе Angular 13 у меня возникла эта ситуация с синхронизацией/асинхронностью, которую я не могу решить. Я вызываю функцию, которая должна вернуть обещание.

В этой вызванной функции мне нужно перебрать массив объектов и для каждого объекта выполнить некоторые действия, включая вызов двух наблюдаемых .

ПередprocessLearnersInvitationsфункция разрешается, цикл должен завершиться, и дальнейшие действия над результатами цикла должны быть завершены.

Проблема: эти действия НЕ ЖДУТ завершения цикла (поэтому SuccessCount всегда равен 0).

Как я могу заставить этот сценарий работать?

Вызванное обещание сокращено:

      processLearnersInvitations(keyHelperPerson: string, invitingPersons) {
    return new Promise(async (resolve,reject) => {

        for await (const invitedPerson of invitingPersons) {
            var successCounter;
            var inviteesNames;
            
            this.tgdb.runQuery('firstQuery...')
            .subscribe(
                async result => {
                    
                    this.tgdb.runQuery('secondQuery...')
                    .subscribe(
                        async result => {
                            
                            if (...) {
                                successCounter++;
                            } else {
                                reject();
                            }
                            
                        });
                    
                });
            
        } //END OF LOOP
        
        if (successCount == invitingPersons.length) {
          this.notifyInvitingLearners(invitingPersons, true);
          this.dialogs.displayToast('','Wohoo! you are now a trusted helper of ' + inviteesNames + '.', DialogType.Success);   
          resolve(1);  
        }
    
    });
}

Вызов вышеуказанной функции:

      this.processLearnersInvitations(personKey, invitingPersons).then((resX) => {
  console.log('Back from processLearnersInvitations. About to route based on role: ', role);
  if ((role>0)&&(resX==1)) {
    this.routeBasedOnRole(role);
  }
});

0 ответов

Другие вопросы по тегам