angular2将Observable中的字符串值变为局部变量

时间:2017-11-04 01:20:20

标签: angular subscribe

我有一个返回包含字符串的Observable的函数,如下所示:

retrieveDialingCode(countrycode: string): Observable<any> {
    return this.countries.map(res => res
          .find(country => country.alpha2 === countrycode)
          .countryCallingCodes[0]
      .replace(/\D/g, ''));
}

当我像这样使用它时效果很好:

this.retrieveDialingCode(countrycode).subscribe(res => this.phone.patchValue( { isodialingcode: res } ) );

但是当我像这样使用它时,我只能在dialingCode中获得一个Object:

const dialingCode = this.retrieveDialingCode(phone.isocountrycode).subscribe(res => console.log(res));

我做错了什么?

2 个答案:

答案 0 :(得分:1)

可观察的'问题'是它们不能轻易转换为值,然后在同步代码中使用,因为你总是要等待observable发出。

实际上,根据您的首次使用情况,您应该拥有依赖于<{1}} 订阅结果的所有代码。

您可以找到模式

retrieveDialingCode

会在某些时候起作用,但解决let myVar; myObservable.subscribe(value => myVar = value); somethingThatUsesMyVar(myVar); 的任何延迟都意味着myVar将没有预期值。

注意,如果myObservable不是可观察但是数组,则可以使this.countries返回展开的值而不是可观察的值,然后没问题。

答案 1 :(得分:0)

这是因为在最后一种情况下,您的代码不会返回响应,请尝试使用:

let dialingCode;
this.retrieveDialingCode(phone.isocountrycode).subscribe(res => {
  dialingCode = res;
});

此处,我只存储subscribedialingCode变量的回复。