如何在angular中处理异步进度列表的视图?

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

我需要在angular中显示一个进度列表,我想为列表中的所有项目发送REST请求。我想为列表中的所有项目发送REST请求。我想我们有一个项目列表,我们将在后台为每个项目更改设置。即使一个请求也需要10秒左右。我想把这些请求并行发送。我将在列表中显示情况的进展。我不想让请求互相等待。所以我从RxJS库文档中搜索了一下 https:/rxjs-dev.firebaseapp.com。 我看到我可以使用forkJoin或merge或concat方法,但我认为这两种方法都不适合我的需求。因为如果我使用forkJoin,它会等待所有的请求。如果我使用merge,我想我没有可靠性,因为如果两个请求同时完成,我将失去其中一个响应。Concat方法是一个一个地处理请求。我应该怎么做才能达到这个目的?

编辑 所以我在myHttpService中有这个方法。

updateSetting(id: string, setting: Setting): Observable<any> {
    return this.http.post(this.updateSettingEndpoint + id, setting);
}

这个端点需要一段时间来完成。我想为很多id并行调用这个方法。所以在我的其他服务中,我有这个方法

import { Observable, merge } from 'rxjs';
...
public saveMultipleSettings(idList: string[], setting: Setting) {

    const observables: Array<Observable<any>> = new Array();

    for (let i = 0; i < idList.length; i++) {
        observables.push(this.myHttpService.updateSetting(idList[i], setting));
    }
    return merge(observables);
}
angular rxjs
1个回答
2
投票

只是需要采取一个百分比计数的observable完成与 scan

merge(observables).pipe(scan((curr,acc)=>
(1/observables.length+acc)*100 // compute percentage
,0)
© www.soinside.com 2019 - 2024. All rights reserved.