我正在尝试同步获取可观察到的最新状态。根据{{3}} for ngrx / store 2.0 you can always rely on subscribe() running synchronously if you have to get the state value
。
我找不到任何支持此功能的当前文档。这对于商店的当前版本(例如7.4.0)仍然有效吗?
示例代码:
method(someId: string): string {
let value: string;
this.service.getSomeValue$(someId).pipe(take(1)).subscribe(s => value = s);
return value;
}
答案 0 :(得分:1)
可观察对象将始终具有最新状态(除非进行其他操作)。
并且同步意味着您不使用回调。
话虽如此,您只需使用
async myFunc() {
lastValue = await myObs$.fromPromise();
}
这将以同步方式返回您可观察到的最后一个值。
答案 1 :(得分:1)
尝试一下:
method(someId: string): string {
let value: string;
this.service.getSomeValue$(someId).pipe(take(1)).subscribe(s =>
value = s;
return value;});
}
答案 2 :(得分:1)
如果您需要了解某些代码是否在不深入源代码的情况下同步运行,则可以对其进行测试。
设置一些异步代码(例如setTimeout
或Promise
(首先在宏队列上运行,然后在微队列上运行),然后设置要测试的代码,然后再设置一些同步代码。结果应该是:
如果结果是这样,则您的代码是同步的。