• 3
  • 新人请关照

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

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

阅读 167
评论
    3 个回答
    • 3.7k

    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 么?发一个请求就行。

      • 753

      用 Promise 实现呢

        • 1.1k

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

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

        然后在V层:

        [disabled]="count !== 0"
          撰写回答

          登录后参与交流、获取后续更新提醒

          相似问题
          推荐文章