Очистка массива в функции опроса - PullRequest
0 голосов
/ 28 июня 2018

У меня есть ситуация здесь в службе опросов.

В каждом опросе я вставляю запись в массив (this.status) и возвращаю этот массив.

Но на каждой итерации мне нужно очистить массив и запустить новый массив, как это сделать?

Пожалуйста, найдите код ниже:

pollUsecases(userId,interval):any[] {

    // Polling in every 1 min
    Observable.interval(interval).startWith(0)
    .switchMap(() => this.http.get<any[]>(Appconfig.HISURL+ '/api/UsecaseExecution/GetUsecaselist/1/' + userId +'/100000/1')).map(data => data)
        .subscribe((data) => {
        data.forEach((element, index) => { 

         // Observable.timer(0, 1000) Immediatly execute the api without any dealy 
         Observable.timer(0, 1000)
         .switchMap(() => this.http.get<any[]>(Appconfig.HISURL+ '/api/UsecaseExecution/GetUsecaseExecutionStatus/' + element.UsecaseId)).map(data => data)
             .subscribe((data) => {               
                this.status[index]=data;                           
             });
      }); 

        }); 
        return this.status;
}

1 Ответ

0 голосов
/ 28 июня 2018

здесь моя версия, каждый шаг или оператор с комментарием для объяснения причины

// Polling in every min
const ONE_MINS = 1000 * 60;
return Observable.interval(ONE_MINS) // emit every minute, return the Observable
  .mergeMap(() =>
    this.http.get<any[]>(
      Appconfig.HISURL + '/api/UsecaseExecution/GetUsecaselist/1/' + userId + '/100000/1',
    ),
  )
  .mergeMap((data) => from(data)) // assume data is array, use from operator to transform array to event stream
  .mergeMap((element) => this.http.get<any[]>( // each element in stream mergeMap to a request observable
    Appconfig.HISURL +
      '/api/UsecaseExecution/GetUsecaseExecutionStatus/' +
      element.UsecaseId)
  .toArray() // finally, collect all request and transform to an array

// in another module or file call the function to get Observable
// const ob$ = getObservable();

// subscribe and you'll get array here
ob$.subscribe((arr) => this.arr = arr);
...