从具有嵌套 Promise 的 Promise 中观察
Observable from a Promise with nested Promise
我有一个调用新 Xrm.WebApi 端点的服务。
这个端点 return 一个 Promise,它有一个嵌套的 Promise "json" (documentation),它允许获得 json returned by服务。
从这个 json 我使用 "parseData" 方法提取了一些数据,return 它作为一个对象数组。
我想 return 一个 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
经过一些尝试,我使用以下代码实现了此功能:
return new Observable(observer => {
Xrm.WebApi.online.execute(crmRequest).then(
result => {
if (result.ok) {
result.json().then(json => {
let res : MyObject[]= this.parseData(json);
observer.next(res);
observer.complete();
});
}
},
error => {
observer.error(error);
}
);
});
它创建一个带有自定义观察者的 Observable,并在嵌套的 Promise 中触发观察者 .next() 以 return 正确的数据。
使用 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[]),
)
有关更多信息,请阅读我的回复:
我有一个调用新 Xrm.WebApi 端点的服务。
这个端点 return 一个 Promise,它有一个嵌套的 Promise "json" (documentation),它允许获得 json returned by服务。
从这个 json 我使用 "parseData" 方法提取了一些数据,return 它作为一个对象数组。
我想 return 一个 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
经过一些尝试,我使用以下代码实现了此功能:
return new Observable(observer => {
Xrm.WebApi.online.execute(crmRequest).then(
result => {
if (result.ok) {
result.json().then(json => {
let res : MyObject[]= this.parseData(json);
observer.next(res);
observer.complete();
});
}
},
error => {
observer.error(error);
}
);
});
它创建一个带有自定义观察者的 Observable,并在嵌套的 Promise 中触发观察者 .next() 以 return 正确的数据。
使用 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[]),
)
有关更多信息,请阅读我的回复: