Rx:强制观察至少需要N秒才能完成

时间:2017-10-07 15:12:08

标签: rxjs rx-java reactivex

我正在为我的应用制作启动画面。我希望它在进入主屏幕之前至少持续N秒。

我有一个 Rx 变量myObservable,它从服务器或本地缓存中返回数据。如何强制myObservable完成至少N秒

myObservable
// .doStuff to make it last at least N seconds
   .subscribe(...)

2 个答案:

答案 0 :(得分:4)

您可以使用forkJoin等待两个Observable完成:

Observable.forkJoin(myObservable, Observable.timer(N), data => data)
  .subscribe(...);

对于没有弃用结果选择器功能的RxJS 6:

forkJoin(myObservable, Observable.timer(N)).pipe(
  map(([data]) => data),
)
.subscribe(...);

修改:正如评论中所述,只有一个参数的Observable.timer(N)将在发出一个项目后完成,因此无需使用take(1)

答案 1 :(得分:0)

Angular 7+示例forkjoin

由于我认为生产速度会较慢,所以我希望在开发系统上增加较大的延迟。 Observable.timer似乎不再可用,但是您可以直接使用timer

forkJoin(

  // any observable such as your service that handles server coms
  myObservable,

  // or http will work like this
  // this.http.get( this.url ),

  // tune values for your app so very quick loads don't look strange
  timer( environment.production ? 133 : 667 ),

).subscribe( ( response: any ) => {

  // since we aren't remapping the response you could have multiple
  // and access them in order as an array
  this.dataset = response[0] || [];

  // the delay is only really useful if some visual state is changing once loaded
  this.loading = false;

});