首页 > 解决方案 > 可从带有嵌套 Promise 的 Promise 中观察到

问题描述

我有一个调用新 Xrm.WebApi 端点的服务。

这个端点返回一个 Promise,它有一个嵌套的 Promise “json”(文档),它允许获取服务返回的 json。

我使用“parseData”方法从这个 json 中提取一些数据,该方法将其作为对象数组返回。

我想返回一个Observable<MyObject[]>,但我现在只能得到一个Observable<Promise<MyObject[]>>

我当前的代码如下所示:

return from(Xrm.WebApi.online.execute(crmRequest).then(
      result => {
        if (result.ok) {
          return result.json().then(json => {
            let res : MyObject[]= this.parseData(json);
            return res;
          }); 
        }
      },
      error => {
        throw error;
      }
    ));

环境:
- Angular 8.2
- RxJs 6.4

标签: angularrxjsxrm

解决方案


用于from将您的第一个 Promise 转换为 Observable 并用于switchMap映射到内部 Promise。filter用于仅发出正常的结果,并map用于映射到您想要的输出。当第一个或第二个 Promise 出错时,这个 Observable 会出错。

return from(Xrm.WebApi.online.execute(crmRequest)).pipe(
  filter(result => result.ok),
  switchMap(result => result.json()),
  map(json => this.parseData(json) as MyObject[]),
)

有关更多信息,请阅读我的回复:将 Promise 转换为 Observable


推荐阅读