我正在使用Angular和RxJS observables在Ionic / Angular应用程序中进行HTTP API调用。
this.http
.post('https://API URL', data, {
headers: headers
}).map(response => response.json()).subscribe(
(res) => {},
(err) => {}
);
要求是,如果API请求花费太多时间说10-12s给出成功或错误即200或500等响应那么我想触发一些其他模态popUp或ui元素并保持处理,API请求原样,在后台发生并在完成时通知。
答案 0 :(得分:2)
肯定有很多人会这样做,但我个人更喜欢这个,我把所有东西都放在一个链中:
this.http.post(...)
.merge(Observable.timer(10 * 1000)
.do(() => /* Show a notification or whatever */)
.filter(() => false) // Never pass through this value
)
.take(1) // This is required to complete the chain immediately after the source Observable emits without waiting for the merged one to complete as well
.subscribe(...)
答案 1 :(得分:1)
您使用timeout
方法来实现此目的。
this.http
.post('https://API URL' , data , {
headers : headers
})
.timeout(10000) // 10 seconds
.map(response => response.json())
.subscribe(
(res) => {},
(err)=>{ console.log(err)} // TimeoutError: Timeout has occurred
);
答案 2 :(得分:1)
当另一个发出值时,您可以使用takeUntil取消一个observable。分享,这样你就不会发出两个请求。
> df
CHR START STOP locus
1 1 100 150 1
2 1 200 350 2
3 1 300 400 2
4 2 100 500 3
5 2 400 450 3