【问题标题】:How to delay forkJoin如何延迟forkJoin
【发布时间】:2018-06-21 05:48:47
【问题描述】:

你会如何在 rxjs 中延迟 .forkJoin()

这是我所拥有的,但想使用 delay() 运算符?

return forkJoin(
   this.call1(),
   this.call2(),
   this.call3()
 );

到目前为止,我得到了这个:

return of(null).pipe(
  delay(5000),
  switchmap(() => this.call1()),
  switchmap(() => this.call2()),
  switchmap(() => this.call3()))
);

这可行,但我想使用 forkJoin,我尝试了其他解决方案

return forkJoin(
   of(this.call1()).pipe(delay(5000)),
   of(this.call2()).pipe(delay(5000)),
   of(this.call3()).pipe(delay(5000))
 );

但是好像不行。

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    delay 运算符与pipe 运算符一起使用

    import { delay, take } from 'rxjs/operators';
    import { forkJoin } from 'rxjs/observable/forkJoin';
    import { of } from 'rxjs/observable/of';
    
    return forkJoin(
       of(call1()).pipe(delay(1000)),
       of(call2()).pipe(delay(2000)),
       of(call3()).pipe(delay(1000))
     );
    

    【讨论】:

    • 不能正常工作,请查看更新后的问题。尝试了您的解决方案,它确实延迟了,但调用什么也没做。
    • 使用thisof(this.call1()).pipe(delay(1000))调用函数
    • 是的,这是我实际在做的,控制台也没有错误
    【解决方案2】:

    试试这个

    import { delay } from 'rxjs/operators';
    
    return forkjoin(call1(),call2(),call3).pipe(delay(500));
    

    【讨论】:

      【解决方案3】:

      也许这个更完整的例子会帮助你找到你需要的解决方案:

      import { delay } from 'rxjs/operators';
      import { Observable } from "rxjs";
      import { forkJoin } from 'rxjs/observable/forkJoin';
      
      function call1(): Observable<any> {
        return new Observable<any>(observer => {
          setTimeout(_ => {
            observer.next('CALL1');
            observer.complete();
          }, 1000);
        })
      }
      function call2(): Observable<any> {
        return new Observable<any>(observer => {
          setTimeout(_ => {
            observer.next('CALL2');
            observer.complete();
          }, 2000);
        });
      } 
      function call3(): Observable<any> {
        return new Observable<any>(observer => {
          setTimeout(_ => {
            observer.next('CALL3');
            observer.complete();
          }, 3000);
        })
      }
      
      forkJoin(call1(), call2(), call3()).pipe(delay(5000)).subscribe(
        response => console.log(response)
      )
      

      【讨论】:

        猜你喜欢
        • 2012-08-10
        • 2013-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-04
        • 1970-01-01
        相关资源
        最近更新 更多