代码之家  ›  专栏  ›  技术社区  ›  PerrierCitror

Rx:可观察到的力至少需要N秒才能完成

  •  4
  • PerrierCitror  · 技术社区  · 7 年前

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

    我有一个 接收 变量 myObservable 从服务器或本地缓存返回数据。如何强制 肌肉可观察 在中完成 ?

    myObservable
    // .doStuff to make it last at least N seconds
       .subscribe(...)
    
    2 回复  |  直到 7 年前
        1
  •  6
  •   martin    6 年前

    您可以使用 forkJoin 等待两个观察点完成:

    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) .

        2
  •  2
  •   pcnate    5 年前

    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;
    
    });