【问题标题】:Angular 2 Pipe - can't return value inside a promiseAngular 2 Pipe - 无法在承诺中返回值
【发布时间】:2016-07-12 10:41:35
【问题描述】:

我正在尝试为 angular2 做一个非常简单的翻译管道。但我可能错了如何承诺工作。这个想法是从调用 PouchDB 中的文档的异步服务中获取语言参数。 仅供参考,数据是这样组织的:

{
title: {
   fr: "text in french",
   en : "text in english",
...
}

promise 中的 return 不起作用。 html 模板为空。我不明白为什么。

@Pipe({name: 'translate'})

export class Translate {

  lang:any;

  constructor(private interfaceService: Interface){}

  transform(obj) {

    this.interfaceService.getParams().then((data) => {
      return obj[data.language]
    }).catch((error) => {
      console.log(error);
    });

  }

}

如果我把回报放在承诺之外,它会起作用:

@Pipe({name: 'translate'})

export class Translate {

  lang:any;

  constructor(private interfaceService: Interface){}

  transform(obj) {
   return obj.en

  }

}

感谢您的帮助

【问题讨论】:

    标签: angular promise pipe


    【解决方案1】:

    您必须从函数返回结果承诺。

    export class Translate {
      // ...
      transform(obj) {
        return this.interfaceService.getParams().then((data) => {
          return obj[data.language]
        }).catch((error) => {
          console.log(error);
          throw error; // or `return Promise.reject(error);`
        });
      }
    }
    

    【讨论】:

    • 谢谢它有效,但我仍然有问题。它在模板中返回一个 [object object] !我尝试了很多事情,比如使用管道“json”,它显示在:{"__zone_symbol__state":true,"__zone_symbol_value":"Text in english"}之后我试图返回一个简单的字符串,但结果相同......
    • @katzu 我认为你需要异步管道angular.io/docs/ts/latest/guide/pipes.html#!#async-pipe
    • 是的,非常感谢,只需使用异步管道
    • 在我的例子中它返回 [object Promise]
    • @Donovant 那是预期的
    猜你喜欢
    • 2017-02-08
    • 2016-10-25
    • 2017-08-04
    • 2021-05-04
    • 2020-09-21
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多