gpt4 book ai didi

javascript - RxJS skipWhile bool 值为真

转载 作者:行者123 更新时间:2023-11-30 20:26:58 25 4
gpt4 key购买 nike

我有以下用例:

有一项服务可以将具有特定 ID 的计算任务排队。我连接了一个 observable 来查询服务的状态。只要 ID 在队列中,查询就返回 true(尚未计算)。一旦查询为false,则表示任务已经计算完毕。

我正在寻找仅当返回值为 false 时才发出 observable 的可能性。到目前为止,我已经尝试使用 .skipWhile.filter,但无法实现所需的行为。

private calc = new Subject<T>();

calculate(id: number): Observable<T> {
this.calcService.searchID(id).filter((x: boolean) => x == false)
.subscribe((dat: boolean) => {
this.calc.next(T);
});
return this.calc.share();
}

calculate(id: number): Observable<T> {
this.calcService.searchID(id).skipWhile((x: boolean) => x == true)
.subscribe((dat: boolean) => {
this.calc.next(T);
});

return this.calc.share();
}

(很抱歉使用了== true/false)

希望有人能给我提示。我正在使用 RxJS 6。

编辑:对不起,我错过了什么。 this.calcService.searchID(id) 是一个 HTTP 请求。在每次请求时,它都会返回 bool 值。所以我可能会在 20 个请求或 100 个请求后得到 false。这取决于服务的计算速度。所以我需要一种可能性,要么等到 false 返回,要么重做请求,直到我得到 false

最佳答案

您需要将服务调用包装在一个可监视一系列服务调用的可观察对象中。服务调用将始终发出单个值并完成。

看看这个 stackblitz:https://stackblitz.com/edit/typescript-dwmwls?file=index.ts

但有一个评论:您应该小心使用 first(predicate) - 即使它完成了工作,如果没有发出满足谓词的值,它也会在完成时抛出错误。否则,您可以使用 filter(predicate) + take(1)

如果将 first 替换为 skipWhile + take(1) - 你应该也不错。在 rxjs 中通常有几种方法可以达到相同的结果。

关于javascript - RxJS skipWhile bool 值为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50792086/

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