我有一个返回包含字符串的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));
我做错了什么?
答案 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;
});
此处,我只存储subscribe
对dialingCode
变量的回复。