Angular 4管道中的异步调用

adi*_*yav 2 angular-pipe angular

我在服务上有一个从服务器获取时间的方法,我打算在自定义管道中使用它。管道的目的是将时间戳记与当前时间进行比较,并以人类可读的格式返回它。

服务

export class TimeService{
  currentServerTime;

  fetchCurrentTimeStamp(){
     //http request using Observable
     return sendGETRequest(.....).map(data => {
        this.currentServerTime = data;

        return this.currentServerTime;
     })
  }
}
Run Code Online (Sandbox Code Playgroud)

export class GetTimeFromNowPipe implements PipeTransform{

   fromNow;
   currentServerTime: number;
   constructor(private timeService: TimeService, private appSettings: AppSettings){}

   transform(value: number){
        var currentTime;
        this.timeService.fetchCurrentTimestamp().subscribe(data => {
            currentTime = data
            if(!value) return "";

            if(value){
               let newDate = moment.unix(value);
               this.fromNow = newDate.from(moment.unix(currentTime), true);
            }
          return this.fromNow;
        });

   }
}
Run Code Online (Sandbox Code Playgroud)

的HTML

<ul>
    <li *ngFor = "let model of models">
        <span>{{model.created | getTimeFromNow}}</span>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我陷入了异步调用。仅从服务器获取数据后,如何从管道返回值?

Gün*_*uer 5

return缺少A ,subscribe需要进行更改map以允许异步管道执行订阅

return this.timeService.fetchCurrentTimestamp().map(data => {
Run Code Online (Sandbox Code Playgroud)

对于异步值,需要使用异步管道

<span>{{model.created | getTimeFromNow | async }}</span>
Run Code Online (Sandbox Code Playgroud)