我正在尝试在RxJS中实现以下行为:
这对于UX非常有用,因为即使调用需要1ms,我也想显示一个至少100ms的加载图标.
我还没有发现任何方式要么实现此delay
,throttle
,debounce
或它的变化.
this.eventThatFires
.switchMap(data => {
let startTime = Date.now();
return this.callHttpService(data)
.delay(new Date(startTime + 1000));
})
Run Code Online (Sandbox Code Playgroud)
我假设这样的工作有效,但使用绝对日期似乎与当前时间有一个时间差,而不是安排那个绝对时间的延迟.
编辑:
似乎没有内置的运算符可以像我描述的那样工作.我刚创建它因为我将在整个应用程序中使用它:
import { Observable } from "rxjs/Observable";
function delayAtLeast<T>(this: Observable<T>, delay: number): Observable<T> {
return Observable.combineLatest(
Observable.timer(delay),
this)
.map(([_, i]) => i);
}
Observable.prototype.delayAtLeast = delayAtLeast;
declare module "rxjs/Observable" {
interface Observable<T> {
delayAtLeast: typeof delayAtLeast;
}
}
Run Code Online (Sandbox Code Playgroud)
有效地delay
按日期与delay
数字相同,唯一的区别是延迟持续时间被计算为指定日期和当前时间的差异.
您可以使用delayWhen
运算符在发出值时计算延迟:
this.eventThatFires
.switchMap(data => {
let startTime = Date.now();
return this.callHttpService(data)
.delayWhen(() => Rx.Observable.timer(500 + startTime - Date.now()))
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1495 次 |
最近记录: |