5.6 AsyncPipe 预置de有状态管道 - RLwu/angular-start GitHub Wiki

AsyncPipe

AsyncPipe是Angular2框架预置的一个有状态管道,它的输入是一个异步对象:Promise对象 、Observable对象或者EventEmitter对象。

每当异步对象产生新的值,AsyncPipe会返回这个新的值,因此,AsyncPipe需要Angular2框架 持续进行变化检测,它的Pipe注解的pure属性值为false。

我们可以使用AsyncPipe来重写之前的EzCountdown管道,让它返回一个Observable:

@Pipe({name : "countdown"})
class EzCountdown{
    transform(input){
        var counter = input;
        return new Observable(o => {
            setInterval(_ => {
                o.next(counter);
                counter--;
                if(counter<0) o.complete();
            },1000);
        });
    }
}

你注意到现在EzCountdown是一个无状态的管道了,它返回一个Observable对象,我们在模板中 使用AsyncPipe来继续处理这个对象:

{{ 10 | countdown | async }} 简单地说,Observable和EventEmitter适合用多次返回结果的异步应用场景,而Promise则适合于 仅返回一次结果的异步应用场景。