【问题标题】:Wait for two actions inside component ngrx store等待组件 ngrx 存储中的两个操作
【发布时间】:2018-11-20 03:08:40
【问题描述】:

我有 2 个名为 METADATA_SUCCESS_ACTION_1 和 SUCCESS_ACTION_2 的操作。 如何等待这 2 个操作完成,然后订阅合并数据。

this.actions
  .pipe(
    ofType(METADATA_SUCCESS_ACTION_1),
    take(1)
  )
  .subscribe((data1: any) => {
    console.log(data1)
  });

this.actions
  .pipe(
    ofType(SUCCESS_ACTION_2),
    take(1)
  )
  .subscribe((data2: any) => {
    console.log(data2)
  });

我想等待成功发生,然后将数据作为元数据以及成功数据处理

【问题讨论】:

    标签: angular ngrx ngrx-store


    【解决方案1】:

    听起来您可以在这里使用forkJoin 运算符(当所有可观察对象完成后,从每个对象发出最后一个发出的值。)。来自文档:

    为什么要使用 forkJoin?

    当你有一组 observables 和 只关心每个的最终发射值。一种常见的用例 因为这是如果您希望在页面加载时发出多个请求(或 其他一些事件)并且只想在响应有 都收到了。通过这种方式,它类似于您可能使用的方式 Promise.all.

    请注意,如果提供给 forkJoin 的任何内部 observables 错误,您将失去任何其他可观察数据的价值,或者 如果你不正确catch错误就已经完成了 内可观察。如果您只关心所有内部可观察对象 成功完成你可以在外面发现错误。

    同样值得注意的是,如果你有一个可观察到的发射更多 不止一项,而且您关心以前的排放量 forkJoin 不是正确的选择。在这些情况下,您可能会过得更好 使用 combineLatestzip 之类的运算符。

    要使用它,您可以在上面的示例中使用以下代码。

    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);
    })
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 2015-01-31
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      相关资源
      最近更新 更多