等待订阅

时间:2018-03-21 18:47:28

标签: angular rxjs observable

我有一个函数使用库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;
    });
}

但我知道这不是好方法。

非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用map之类的Observable方法:

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

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

答案 1 :(得分:0)

您想要使用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));