我有以下内容:
isLoading$: Rx.BehaviorSubject<boolean> = new Rx.BehaviorSubject(false);
private getSomething(): void {
this.isLoading$.next(true);
this.http._get().subscribe((data) => {
//actions..
},
error => { console.log(error); },
() => {
setTimeout(500);
this.isLoading$.next(false);
}
);
}
我希望显示加载栏至少500毫秒才能看到它,因为大多数情况下数据检索速度太快,以至于看不到加载条是不可能的。
答案 0 :(得分:2)
您需要使用setTimeout
来实现此目标 -
setTimeout(() => {
this.isLoading$.next(false);
// DO what else needed here
}, 500);
答案 1 :(得分:0)
setTimeout
应该是这样的:
setTimeout(() =>{
// some code here...
this.isLoading$.next(false);
}, 500);
答案 2 :(得分:0)
您可以使用timer并使用combineLatest将其与您的http电话结合使用。这将保证在计时器中设置的最小时间,但如果http呼叫已经占用了最小延迟,则不会再增加任何延迟。
import { timer } from 'rxjs/observable/timer';
import { combineLatest } from 'rxjs/observable/combineLatest';
getSometing() {
const timerSource = timer(500);
const httpSource = this.http._get();
const httpWithMinTimer = combineLatest(timerSource, httpSource, (t, h) => h)
httpWithMinTimer.subscribe(data => {this.isLoading$.next(false);})
}