繁体   English   中英

为什么异步管道不起作用?

[英]Why does not it work async pipe?

@Pipe({
  name: 'trans',
  pure: false
})
export class RandomPipe implements PipeTransform {
  constructor(private  cdRef:ChangeDetectorRef) {
  }

  transform(value:string):any {
    return new AsyncPipe(this.cdRef).transform(new Observable<string>(observer=>{
      observer.next('rand1');
      setTimeout(()=>{
        observer.next('rand@2');
      })
    }));
  }
}

它仅适用于'rand1'字符串-同步,但只能使用observer.next('rand @ 2');

不起作用-异步。 如何使其工作?

您可以尝试通过以下方式实现它:

@Pipe({
  name: 'someRand',
  pure: false
})
export class RandomPipe implements PipeTransform {
  constructor(private  cdRef:ChangeDetectorRef) {}

  pipe: AsyncPipe;
  obs: Observable<string>;

  transform(value:string):any {
    if (!this.pipe) {
      this.pipe = new AsyncPipe(this.cdRef);
      this.obs = new Observable<string>(observer=>{
        observer.next('rand1');
        setTimeout(()=>{
          observer.next('rand@2');
        }, 500)
      });
    }

    return this.pipe.transform(this.obs);
  }
}

另请参见柱塞示例

您在这里不需要AsyncPipe

@Pipe({
  name: 'trans',
  pure: false
})
export class RandomPipe implements PipeTransform {
  constructor(private  cdRef:ChangeDetectorRef) {
  }

  transform(value:string):any {
    return new Observable<string>(observer=>{
      observer.next('rand1');
      setTimeout(()=>{
        observer.next('rand@2');
      })
    }));
  }
}

然后使用异步管道

{{someValue | trans | async }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM