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

发布于 2022-09-12 04:37:47 字数 82 浏览 13 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

与风相奔跑 2022-09-19 04:37:47

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

秋意浓 2022-09-19 04:37:47

用 Promise 实现呢

风柔一江水 2022-09-19 04:37:47

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

count = 0;

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

然后在V层:

[disabled]="count !== 0"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文