当我console.log(this.distances)
时,它可用但不存储在内存中。如何将其存储在内存中以便使用?即使我在数据到达后运行一个函数,我仍然得到数组错误null
。
这是我的功能:
findClosestRiderToUser() {
this.fetchAllRiders().subscribe( async distance => {
await this.distances.push( distance );
});
}
问题:尝试在订阅之外使用this.distances
无效。我该如何解决这个问题?
答案 0 :(得分:1)
Observable通常是异步的,所以
obs$.subscribe(data => this.data = data);
console.log(this.data);
在许多或大多数情况下不起作用,因为第二行在数据到达之前运行。你想做的是
obs$.subscribe(data => {
this.data = data;
console.log(this.data);
});
如果你想在一个函数中进行这个调用,只需从函数中返回observable并从调用者订阅:
function getData() { return obs$; }
getData().subscribe(...);
rxjs附带了许多运算符,允许您进一步组合,链接和操作可观察对象。这样您就可以保持完全异步,并且不必使用await
来阻止代码的执行。
如果你绝对做想要阻止,你可以使用
const data = await obs$.toPromise();
但是你应该尝试使用反应模式,而不是在第一次机会时对其进行制动。你也失去了观察者发出数据流而不仅仅是单个数据的能力。