sqw*_*qwk 2 rxjs ecmascript-6 rxjs5
我想在订阅自动调节器Observable时每隔x秒查询一次API,确保在发送另一个请求之前完成了最后一个请求.
let autoRefresher = new Observable().exhaustMap(() => Observable.defer(() => {
return someService.returningAPromise();
}).timeout(refreshIntervalInMs).repeat());
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?如何在不创建新的observable的情况下更新刷新间隔?
我这样做:
import {Observable} from 'rxjs';
function doRequest() {
if (Math.random() < 0.25) {
return Observable.of('HTTP Response').delay(3000);
} else {
return Observable.of('HTTP Response');
}
}
let autoRefresher = Observable.timer(0, 1000)
.exhaustMap(doRequest)
.subscribe(response => {
console.log(response);
});
Run Code Online (Sandbox Code Playgroud)
观看现场演示:http://plnkr.co/edit/7HAib10r6Vdl1x2U2wFS
这随机地造成3秒延迟.操作员timer()定期发出一个值.然后,exhaustMap()订阅前面的Observable并忽略在当前Observable完成之前发出的所有Observable.所以timer()发出价值,但这些被忽略了exhaust().
顺便说一句,请注意我正在使用TypeScript.
| 归档时间: |
|
| 查看次数: |
2185 次 |
| 最近记录: |