Приостановить выполнение angular, пока подписка не вернет значение - PullRequest
0 голосов
/ 13 марта 2020

Я использую Angular 8.

Есть ли способ приостановить выполнение кода, пока не будет возвращен результат подписки? Мне нужно проверить возврат этой подписки, чтобы продолжить выполнение кода.

Вот что у меня есть:

for (let j = 0; this.listExecution.length; j++) {
  this.service.ValidateAction(this.listExecution[j].id).subscribe(result => {
    if (result) {
      this.service.TurnOn(dataChain).subscribe(result => {});
    } 
    else {
      this.service.TurnDown(dataChain).subscribe(result => {});
    }
  });
}

Когда вызывается ValidateAction, требуется время, чтобы вернуть результат, поэтому он приводит к сбою следующей проверки.

Как я могу приостановить его?

1 Ответ

0 голосов
/ 14 марта 2020

Если я правильно понимаю вашу проблему, вы хотите запустить асинхронную проверку последовательно по списку выполнения. Вы можете использовать Rx js оператор ConcatMap для того же. Ниже приведен пример.

var Observable = Rx.Observable;

function mockHTTPRequest(url) {
    return Observable.of(`Response from ${url}`)
      .delay(1000);
}

let listExecution = ['exe-1', 'exe-2', 'exe-3', 'exe4-4'];
let start = (new Date()).getTime();

Observable.from(urls)
  .concatMap(url => mockHTTPRequest(url))
  .timestamp()
  .map(stamp => [stamp.timestamp - start, stamp.value])
  .subscribe(val => console.log(val));

Здесь вы можете проверить, есть ли у меня список выполнений, аналогичный вам, который внутренне передавал вызов API бэкенда, смоделированный с использованием метода mockHTTPRequest. Если вы посмотрите на вывод, вы увидите, что Ajax вызовы были сделаны последовательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...