可观察数据不会持久存在

时间:2017-12-13 21:08:16

标签: javascript rxjs

当我console.log(this.distances)时,它可用但不存储在内存中。如何将其存储在内存中以便使用?即使我在数据到达后运行一个函数,我仍然得到数组错误null

这是我的功能:

findClosestRiderToUser() { 
    this.fetchAllRiders().subscribe( async distance => {        
      await this.distances.push( distance );
    });
}

问题:尝试在订阅之外使用this.distances无效。我该如何解决这个问题?

1 个答案:

答案 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();

但是你应该尝试使用反应模式,而不是在第一次机会时对其进行制动。你也失去了观察者发出数据流而不仅仅是单个数据的能力。