【问题标题】:Angular: How can I alter a return inside a subscribe?Angular:如何更改订阅中的回报?
【发布时间】:2021-05-14 12:36:03
【问题描述】:

我有多个利用一个功能的组件。他们期望返回对象数组。但是,有一种情况我需要检查 observable 的返回值,以便在返回之前更改数组的内容:

let projectMenu: MenuElement[];
...
this.myService.enabledFeatures.subscribe(features => {
  if (features[FeatureKeys.SPECIAL_KEY]) {
    projectMenu.push(this.getNewMenuItem(project));
    projectMenu.push(this.getSecondaryMenuItem(project));
  }
});

return projectMenu;

显然return projectMenu 将在订阅发挥作用之前返回其当前值。我基本上需要把那个subscribe 变成一个同步请求。也许通过异步等待?不过不太清楚该怎么做。

【问题讨论】:

  • 为什么不返回 observable 而不是 projectMenu (将责任转移给调用者订阅)?正如@Bitman 建议的那样,使用 .pipe(map()) 来转换/调整发出的值。
  • @VincentAUDIBERT 无需赘述,它的使用在应用程序中非常深入。切换到 observable 需要我们没有时间做的重构。地图解决方案有效并被选为答案。

标签: angular asynchronous async-await observable


【解决方案1】:

您可以使用map 在发出之前更改值:

  this.myService.enabledFeatures.pipe(
    map((features) => {
      let projectMenu: MenuElement[] = [];
      if (features[FeatureKeys.SPECIAL_KEY]) {
        projectMenu.push(this.getNewMenuItem(project));
        projectMenu.push(this.getSecondaryMenuItem(project));
      }
      return projectMenu;
    })
  ).subscribe()

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 1970-01-01
    • 2021-03-18
    • 2017-10-13
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多