【问题标题】:Await for subscribe等待订阅
【发布时间】:2018-03-22 02:52:10
【问题描述】:

我有一个使用库 ngx-translate 的函数,它返回一个 observable。因此,为了使用它,我订阅了该方法并获得了我需要的值。之后我想做一个回报,但我希望在获得价值之后回报发生。

这是我的代码:

test(textePage: string[], params?: Object){
    let textToSpeech: string;
    this._translateService.get(textePage).subscribe(res => {
        textToSpeech = (Object.keys(res).map(e=>res[e])).join('');
    });
    return textToSpeech;
}

我想要类似的东西:

test(textePage: string[], params?: Object){
    let textToSpeech: string;
    this._translateService.get(textePage).subscribe(res => {
        textToSpeech = (Object.keys(res).map(e=>res[e])).join('');
        return textToSpeech;
    });
}

但我知道这不是好方法。

非常感谢。

【问题讨论】:

  • 请说明您希望如何使用结果。您根本无法同步异步请求。所以返回值总是一个 Observable。

标签: angular rxjs observable


【解决方案1】:

您可以使用 Observable 方法,例如 map:

return this._translateService.get(textePage).pipe(
  map(res => (Object.keys(res).map(e=>res[e])).join(''))
);

现在为了使用它,您必须在组件中调用this.test(textePage, params).subscribe 来设置组件的属性。您还可以使用| async 管道为您处理订阅。

【讨论】:

  • 正如我发布我的答案你的弹出:)
【解决方案2】:

您想使用map 运算符,如下所示:

test(textePage: string[], params?: Object){
  return this._translateService.get(textePage).pipe(
    map(res => {
      return (Object.keys(res).map(e=>res[e])).join('');
    })
  );
}

...

test(myStrings, myParam).subscribe(val => console.log(val));

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2013-11-03
    相关资源
    最近更新 更多