如何从Angular2中的可观察值中检索值?

如何从Angular2中的可观察值中检索值?,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,我无法从可观测数据中检索数据 我找不到问题出在哪里。据我所知,我的代码是正确的 private IsPrivateLocation(id: string):boolean { this.service.isLocationPrivate(id).subscribe(res => { this.location = res; }); return this.location.isPrivate; } this.location在方法调用之后仍然是

我无法从可观测数据中检索数据

我找不到问题出在哪里。据我所知,我的代码是正确的

private IsPrivateLocation(id: string):boolean
{
    this.service.isLocationPrivate(id).subscribe(res => {
        this.location = res;
     });
     return this.location.isPrivate;
}
this.location
在方法调用之后仍然是
未定义的。这是一种服务方式:

public isLocationPrivate(id:string):Observable<Location>
{
    return this.http.post(AppConfig.azurefunc.locationUri, {
        id: id,
        operatorId: AppConfig.user.operatorId
    }).pipe(map(res =>res.json()));
}
public isLocationPrivate(id:string):可观察
{
返回此.http.post(AppConfig.azurefunc.locationUri{
id:id,
operatorId:AppConfig.user.operatorId
}).pipe(map(res=>res.json());
}
为什么它还没有定义?我做错了什么

更新:
我在不等待观察的情况下设法找到了解决办法。然而,我尝试了下面提供的所有东西,但没有一个奏效。也许这与我使用Angular2 beta有关

它应该是
未定义的
。因为
可观察对象是异步的。您应该从
IsPrivateLocation()
方法返回一个
Observable
,然后在链的末尾订阅它

可观察对象不是这样工作的

private LoadLocationPrivate(id:string){
this.service.isLocationPrivate(id).subscribe(res=>{
这个位置=res;
if(this.location.isPrivate){
//做点什么
}否则{
//做其他事情
}
});
}
需要导航时调用LoadLocationPrivate


希望这有帮助

如前所述,可观察对象可以是同步的,也可以是异步的。 在您的例子中,由于您使用的是http rest服务,所以它是异步的

您在此处的选项是使用异步/await

private async isPrivateLocation(id: string)
{
    const location = await this.service.isLocationPrivate(id);
    return this.location.isPrivate;
}
并调用该函数:

const isPrivate = await this.isPrivateLocation(123);
(当然,此代码可能有一些错误)。请参阅文件以供参考。


另一种选择是订阅回调中的Observable并重定向,但据我所知,这不是您想要实现的。

您可以发布代码来说明如何使用该方法吗?您的意思是我如何调用IsPrivateLocation()方法吗?类似于var isPrivate=IsPrivateLocation(id);基本上,
行返回this.location.isPrivate
this.location=res之前执行-前者在相同的事件时钟周期内运行,后者在HTTP调用发出并收到响应后运行。我发现Observable不适合我的情况。我需要不异步地获取isPrivate值。我需要等待,然后再进一步。有没有办法返回一个位置,而不是从服务的方法中可以观察到的位置?你能告诉我们你的解决方法吗(你可以把它作为一个答案发布)?我试着这样做,我得到了同样的结果。是否有任何方法可以从服务的方法返回布尔值?类似.toPromise()?
toPromise()
的东西也是异步的,不会有任何区别。请显示您尝试了哪些不起作用,我现在就编辑问题。是否有任何方法可以从服务的方法返回
位置
,而不是
可观察的
?我发现可观察的不适合我的情况。我需要不异步地获取isPrivate值。我需要等待,然后再进一步。有没有方法返回一个位置,而不是从服务的方法返回一个可观察的位置?问题是我不需要将它绑定到视图。我需要这个值,因为如果它是真的,那么我将重定向到另一个组件。因此,您可以将用于导航到subscribe Callback的代码移动到subscribe Callback中。您可以演示如何操作吗?我对打字脚本完全不熟悉,但我需要在系统前端做一些更改。这就是为什么我要为之奋斗。对不起,
成本是多少?关于您案例中的
isPrivateLocation
:在这种情况下,位置是可观察的,它没有
isPrivate
属性。我的错误是“const”而不是“cost”。查看文档:wait用于解决承诺/可观察性问题。我已经阅读并尝试过了。即使我使用
wait
location,它仍然具有可观察的类型,而不仅仅是一个位置。因此,它没有isPrivate属性;然后我的函数需要返回Promise,然后我不知道如何处理Promise对象。