gpt4 book ai didi

javascript - mergeLatest() 未按预期工作

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

我有两个来源:saveDialog$ 和 file$。第一个用于选择异步目录路径来保存第二个源发出的文件。我想组合发出的值,以便收到一次选择的路径与所有文件的组合。我尝试使用combineLatest(),但不是 7 个响应,而是只有 1 个响应,其中只有最新文件,如下所示:["path\to\dir", Object]。 ForkJoin 发出相同的信号。

这是我的代码:

    const saveDialog$ = Observable.bindCallback(
remote.dialog.showOpenDialog
)(saveOptions).map(
dirName => dirName ? dirName[0] : ''
).shareReplay(1);

saveDialog$.combineLatest(
file$
).subscribe(
data => console.warn(data)
)

如果发出 7 个文件(例如),我如何获得 7 个组合响应?

最佳答案

您可以使用combineAll像这样:

// Assume we emit 7 file names, starting immediately, but with some
// delay in between.
const file$ = Rx.Observable.timer(0, 300)
.map(val => `file-${val}.png`)
.take(7);

// Assume your path is emitted only after a bit of time has passed.
const saveDialog$ = Rx.Observable.of('path/')
.delay(1000);

const result$ = saveDialog$
// Map the path emission to the files observable.
// This produces a higher-order observable.
// To not lose the emitted path value, we map the emitted file
// names together; instead of preparing the string here you
// could also use
// file$.map(file => [path, file])
.map(path => file$.map(file => `${path}${file}`))
.combineAll();

您可以找到一个工作示例 here .

<小时/>

顺便说一句,这仅适用于冷可观察量(您尚未指定您的可观察量是否是热的)。如果 file$ 是一个热可观察对象,您需要通过 ReplaySubject 对其进行多播。 Here's演示这一点的链接。

关于javascript - mergeLatest() 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287172/

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