【发布时间】:2019-07-19 23:06:54
【问题描述】:
我想从 api 获取数据并将其分配给我的变量。
在订阅中,我将数据分配给subscribe 中的变量和控制台记录的变量。一切正常,变量现在有了数据,但在subscribe 结束后,busDepotLocality 仍然是未定义的。试图设置超时等待,但没有
app.component.ts:
busDepotLocality: BusDepotLocality;
ngOnInit() {
this.mapService
.getBusDepotLocality()
.subscribe((data: BusDepotLocality) => {
this.busDepotLocality = data;
console.log(data); // Data is showing, no problem
console.log(this.busDepotLocality); //Assignment passed, data is showing, no problem
});
console.log(this.busDepotLocality); // But after all busDepotLocality will be undefined
【问题讨论】:
-
这是因为您混合了同步和异步调用。 subscribe 所做的只是设置一个侦听器,一旦 getBusDepotLocality 发出一个值,它就会执行 subscribe 中的内容。在设置该侦听器后,您立即执行控制台登录,最后一行被执行,并且由于尚未发出任何值但该值仍未设置。
-
您的变量分配在订阅范围内。一旦 observable 发出一个值(即您的服务返回响应),就会执行 subscribe 中的代码。您首先到达最后一个
console.log(),然后您会收到响应并执行订阅范围代码。要了解javascript中的async机制,你应该看看Philip Roberts wonderful expanation
标签: javascript angular typescript http