【发布时间】: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