Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
674 views
in Technique[技术] by (71.8m points)

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
...