如果Angular HTTP observable在n秒内没有给出响应,则在后台执行API调用

时间:2018-03-05 19:22:57

标签: angular http ionic-framework rxjs

我正在使用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请求原样,在后台发生并在完成时通知。

3 个答案:

答案 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