我有两个名为METADATA_SUCCESS_ACTION_1和SUCCESS_ACTION_2的动作。 我如何等待这2个操作完成,然后订阅合并数据。
services
我要等待成功都发生,然后再处理作为元数据和成功数据的数据
答案 0 :(得分:2)
听起来像您可以在此处使用forkJoin
运算符(所有可观测值完成后,从每个可观测值中发出最后一个发出的值。)。从文档中:
为什么要使用forkJoin?
当您有一组可观测值和 只关心每个的最终发射值。一个常见的用例 因为这是如果您希望在页面加载时发出多个请求(或 其他事件),并且只希望在响应有 被所有人接受。这样类似于您的使用方式
Promise.all
。请注意,如果提供给
forkJoin
的任何内部可观察物 错误,您将失去任何其他会观察到的可观测值的价值 如果您没有正确catch
上的错误,则说明您已经完成了 内部可以观察到。如果您只关心所有内部可观测物 成功完成后,您可以从外面捕获错误。还值得一提的是,如果您有一个观测到的物体发出更多 一项以上,而您担心先前的排放
forkJoin
不是正确的选择。在这些情况下,您可能会更好 使用combineLatest
或zip
之类的运算符。
要使用它,可以在上面的示例中使用以下代码。
forkJoin(
this.actions.pipe(ofType(METADATA_SUCCESS_ACTION_1), take(1)),
this.actions.pipe(ofType(SUCCESS_ACTION_2), take(1))
).subscribe(([data1, data2]) => {
console.log(data1);
console.log(data2);
})