【发布时间】:2017-04-05 00:19:28
【问题描述】:
我想知道如何在 RxJS 中获得类似下面的内容。
- 每隔一个请求就会发送到服务器。
- 响应可能需要不同的时间。 (1s以上澄清)
- 但是当只有一些响应到达时,所有较旧的未完成请求都将被取消,订阅将只收到这个最新完成的请求的结果。
看起来 switchMap 无法按我的意愿工作。因为每个下一个开始的请求都会在其响应之前取消前一个请求。请参阅下面的代码。
let counter = 0;
let times = [1200, 500];
let getSomePromise = function() {
return new Promise((resolve) => {
let i = counter;
counter++;
if (i < 2) {
console.log('promise ' + i + ' start');
}
setTimeout(() => {
if (i < 2) {
console.log('promise ' + i + ' finish');
resolve(i);
}
}, times[i]);
});
}
let ob = Rx.Observable.interval(1000)
.switchMap(() => {
return getSomePromise();
});
let sub = ob.subscribe((value) => {
console.log('result ' + value);
});
<script src="https://unpkg.com/@reactivex/rxjs@5.0.3/dist/global/Rx.js"></script>
我明白了:
promise 0 start
promise 1 start
promise 0 finish
promise 1 finish
result 1
我想要:
promise 0 start
promise 1 start
promise 0 finish
result 0
promise 1 finish
result 1
谢谢。
【问题讨论】:
标签: javascript rxjs