gleber1
@gleber1

Как заставить pipe работать асинхронно без постоянного указывания |async в шаблонах в angular 2?

@Pipe({
  name: 'someRand',
  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'
  • Вопрос задан
  • 597 просмотров
Решения вопроса 1
Думаю можно вот таким образом
@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');
        }, 600)
      });
    }
  
    return this.pipe.transform(this.obs);
  }
}

600 добавил просто ради асинхронности)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы