gpt4 book ai didi

javascript - 使用 ngrx/store 进行观察 - 竞争条件

转载 作者:行者123 更新时间:2023-12-01 03:00:34 25 4
gpt4 key购买 nike

我有一个问题,我认为这是由于我在 ngrx-store 中的初始状态和试图从可观察到的初始响应的组合造成的。我正在使用数据表和大量数据来生成静态报告 - 所以我只想要来自以下位置的第一个“真实”响应:

Observable.zip(this.sites$, this.devices$, this.machines$, this.machineContent$)

在我的 ngrx reducer 中,我将每个状态的初始状态定义为 [] 。然而,有时会出现(我认为是竞争条件)其中一个可观察值将作为 [] 返回,但 Observable.zip 会解析,并且此时它会错误地呈现我的表。

我尝试了以下各种组合:

Observable.zip(this.sites$.skip(1), this.devices$.skip(1), this.machines$.skip(1), this.machineContent$.skip(1))

Observable.zip(this.sites$.skip(1), this.devices$.skip(1), this.machines$.skip(1), this.machineContent$.skip(1))
.take(1)

这些在大约 80% 的时间内有效。对于每个可观察量(machinesIsLoaded、machineContentIsLoaded 等),我还有一个“isLoaded”的可观察量,我考虑将其与 .takeUntil 一起使用。 ,除了我必须检查每个返回 true ,感觉我一定做错了什么。

有什么想法吗?

最佳答案

首先:确保您的 reducer 不会改变数组的状态,因为这给您带来问题。确保您正在克隆数组或使用 ImmutableArray。

第二:使用skipWhile代替过滤器

function isEmpty(table: any[]) : boolean { return !table || !table.length; }

Observable.zip(this.sites$.skipWhile(isEmpty), this.devices$.skipWhile(isEmpty), this.machines$.skipWhile(isEmpty), this.machineContent$.skipWhile(isEmpty));

这将忽略结果,直到数组被填充,然后即使数组再次为空,也始终使用结果。

关于javascript - 使用 ngrx/store 进行观察 - 竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46452664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com