【发布时间】:2017-11-02 17:17:33
【问题描述】:
我想创建一个函数以在服务器中发出 HTTP PUT 请求,但如果在该时间间隔内多次调用该函数,则每 500 毫秒使用最后一次调用参数发送一次,如果仍在进行中,则取消最后一次请求。
我研究并想出了这个解决方案:
const { Observable } = require('rxjs/Observable')
const { Subject } = require('rxjs/Subject')
const { switchMap, auditTime } = require('rxjs/operators')
// Simulate HTTP request
function makeRequest (val) {
return Observable.create(observer => {
console.log('Request:', val);
observer.next(val);
observer.complete();
});
}
const toUpdateStream = new Subject();
const notifier$ = toUpdateStream.pipe(
auditTime(500),
switchMap(val => makeRequest(val))
);
function updateThrottle (val) {
return Observable.create(observer => {
const lastUpdate$ = notifier$.subscribe(res => {
observer.next(res);
observer.complete();
lastUpdate$.unsubscribe();
});
toUpdateStream.next(val);
});
}
// Try to update 3 times with different parameters
updateThrottle(10).subscribe(val => { console.log('1:', val); });
updateThrottle(20).subscribe(val => { console.log('2:', val); });
updateThrottle(30).subscribe(val => { console.log('3:', val); });
输出是:
Request: 30
1: 30
Request: 30
2: 30
Request: 30
3: 30
问题是我只需要用 30 调用一次请求,而不是每次。
我能做什么?
【问题讨论】:
标签: javascript rxjs rxjs5