我有一个发送AJAX请求的功能。如果它们经常发生,我想忽略此函数的额外调用。我可以使用auditTime()运算符做到这一点:
const requestStream$ = new Subject<IRequestOptions>();
requestStream$
.pipe(
auditTime(1000) // no more than 1 time in 1 second
)
.subscribe(requestOptions => {
// send AJAX
});
requestStream$.next({
url: 'http://example.com',
method: 'post',
headers: {}
});
问题是我只需要忽略具有相同参数的请求即可
requestStream$.next('site1');
requestStream$.next('site1'); // call after 500 msec (ignore)
requestStream$.next('site1'); // call after 500 msec (not ignore because it is 1000 msec from first request)
requestStream$.next('site2'); // call after 500 msec (must NOT ignore because there is different url)
答案 0 :(得分:2)
您可以使用groupBy
通过某些参数对传入的请求进行分组。然后分别调节每个组。
import { throttleTime, mergeMap, groupBy } from 'rxjs/operators';
requestStream$
.pipe(
groupBy(request => request.url),
mergeMap(group => group.pipe(throttleTime(1000)))
)
我使用throttleTime
代替了auditTime
,因为您不会使用auditTime
来描述行为。 auditTime
最初将等待1秒钟,然后才在1秒的时间窗口内发出最后一个请求,而throttleTime
将立即发出第一个请求,然后在1秒的时间窗口内忽略其他请求。