清除轮询功能中的数组

问题描述 投票:0回答:1

我在这里有投票服务的情况。

在每个轮询中,我将记录插入数组(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;
}
angular logic polling
1个回答
0
投票

这里是我的版本,每个步骤或操作员都有评论解释原因

// 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);
© www.soinside.com 2019 - 2024. All rights reserved.