Для l oop следует выполнять итерацию только после выполнения тела метода подписки (вложенная подписка в forl oop) в angular 6 - PullRequest
0 голосов
/ 12 июля 2020

У меня есть вложенная подписка в a для каждого l oop, где внутренняя подписка принимает результат внешней подписки в качестве входных данных. Мне нужно, чтобы код был похож на то, когда он выполняет итерацию внутри for l oop, он должен вызывать внешнюю подписку, а результат / вывод ее должен быть передан внутренней подписке. Здесь для l oop следует дождаться завершения процесса перед переходом к следующей итерации. Здесь я предоставляю демо для этого

this.forVar.forEach(item =>{
   this.service.outerSubscribe(item).subscribe(res=>{
      //some coding here 
      this.service.innerSubscribe(res).subscribe(res1=>{//some coding here});
   });
//for each should iterate only after both subscribes are executed.  
});

1 Ответ

0 голосов
/ 12 июля 2020

Попробуйте использовать функцию combineLatest и higher-order mapping operator, например switchMap.

// use switchMap to get values from the inner subscription
const createNestedSubscriptionFromItem = item => 
  this.service.outerSubscribe(item).pipe(
    switchMap(res => this.service.innerSubscribe(res))
  );

// create an array of subscriptions
const subscriptions = this.forVar.map(item => 
  createNestedSubscriptionFromItem(item)
);

// use combineLatest to get updates from all results.
// here you can use other functions like merge or jorkJoin instead combineLatest. 
const allResults$ = combineLatest(subscriptions);

Подробнее о функциях и операторах stati c см. В официальном Справочнике по API ;

...