angular6项目,有30个请求,根据用户配置抽取n个请求发送,待收到全部结果后执行后续操作。

新手上路,请多包涵

angular6项目,有30个显示块,根据用户配置显示n个并发送请求获得需要的数据,待收到全部结果后,编辑按钮变由disabled变为enabled。

阅读 1.8k
3 个回答

Angular httpClient 返回的 observable 是 cold 的,没人 subscribe 是不会发出去的。你就大大方方准备好 30 个 request 然后根据配置筛选出你需要的,然后用rxjs的 forkJoin/zip/combineLatest 再 subscribe 总的结果就 ok.

let requests = [];
for(let i=0; i<30; i++) {
    requests.push(this.httpClient.get(`/url`,{params: new HttpParams({id: i})}));
}

let selected = [0,1,2,3,7,8,12];
let selectedRequests = selected.map(index => requests[index]);

forkJoin(selectedRequests)
    .subscribe(data => {
       // data 
        this.btnDisabled = false;
    })

另外,为什么要发多个请求呢?让这个 API 能接受多个参数不就 ok 么?发一个请求就行。

用 Promise 实现呢

如果不方便用组合操作符,可以简单增加个计数器:

count = 0;

// 发起请求时 count++;
// 请求完毕时 count--;

然后在V层:

[disabled]="count !== 0"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题