我是否仍然可以依靠pipe(take(1))。subscribe()来同步运行?

时间:2019-05-24 13:41:30

标签: angular ngrx-store

我正在尝试同步获取可观察到的最新状态。根据{{​​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;
}

3 个答案:

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

如果您需要了解某些代码是否在不深入源代码的情况下同步运行,则可以对其进行测试。

设置一些异步代码(例如setTimeoutPromise(首先在宏队列上运行,然后在微队列上运行),然后设置要测试的代码,然后再设置一些同步代码。结果应该是:

  • 您测试的代码
  • 同步代码
  • 异步代码

如果结果是这样,则您的代码是同步的。