一旦http请求返回特定值

时间:2017-01-02 19:55:04

标签: error-handling rxjs polling

我写了一个Observable,它正在轮询一个URL,一旦返回一个特定的值就会完成。

private checkPairingStatus(paringModel: any): Observable<ResponseObject> {
    let data = { id: 1234 };
    return Observable
        .interval(2000)
        .switchMap(() => this.get<ResponseObject>('http://api/getstatus', data))
        .first(r => r.Status === 'success') // once our pairing is active we emit that
        .timeout(90000, Observable.throw(new Error('Timeout ocurred')));
        // todo: find a way to abort the interval once the PairingStatus hits the 'canceled' status.
}

这很好用,但是一旦我的响应达到以下状态,我就会挣扎如何抛出异常&#34; r.Status ===&#39;取消&#39;&#34 ;

感谢您提供任何暗示!

此致 卢卡斯

1 个答案:

答案 0 :(得分:3)

你可以使用do()并在任何条件下抛出Error

return Observable
    .interval(200)
    .do(val => {
        if (val == 5) {
            throw new Error('everything is broken');
        }
    })
    .subscribe(
        val => console.log(val),
        err => console.log('Error:', err.message)
    );

打印到控制台:

0
1
2
3
4
Error: everything is broken

在您的情况下,您需要测试r.Status === 'canceled'等条件。