Observable 中的 Promise 没有 return 值
Promise inside Observable does not return value
我正在尝试将 Microsoft PowerBi 嵌入到我的 angular 6 项目中。下一个代码期待 return 一个 powerbi 报告对象,但没有 returning,不知道为什么:
private embedPowerBiReportAndGetPages(htmlElement: HTMLElement, newMyPowerbiReport: MyPowerbiReport): Observable<MyPowerbiReport> {
const config: IEmbedConfiguration = PowerbiHelper.createReportConfig(newMyPowerbiReport);
const microsoftReport: msReport = this.msPowerBiService
.embed(htmlElement, config) as msReport;
return fromEvent(microsoftReport, 'loaded')
.pipe(
tap(() => this.logger.debug('PowerBI: loaded')),
mergeMap(async() => {
this.logger.debug('PowerBI: embed pages loaded');
const msPages: Page[] = await microsoftReport.getPages();
this.logger.debug('PowerBI: msPages', msPages);
newMyPowerbiReport.pages = msPages.map((page: Page) => PowerbiHelper.msPageToEmbeddedPageMapper(page, newMyPowerbiReport));
this.logger.debug('PowerBI: newMyPowerbiReport pages updated', newMyPowerbiReport);
return newMyPowerbiReport;
}),
finalize(() => microsoftReport.off('loaded'))
);
}
好吧,调用了 mergeMap 中的 promise 并且 returns 结果,从记录器我可以看到 PowerBI:newMyPowerbiReport 页面更新和页面数组。但它什么都没有 returned。
终于修复了,这段代码没有任何问题,问题出在父方法中,我在父方法中使用了 forkjoin,似乎 forkjoin 没有订阅这个 observable,将 forkjoin 更改为 scan 万事如意。
我正在尝试将 Microsoft PowerBi 嵌入到我的 angular 6 项目中。下一个代码期待 return 一个 powerbi 报告对象,但没有 returning,不知道为什么:
private embedPowerBiReportAndGetPages(htmlElement: HTMLElement, newMyPowerbiReport: MyPowerbiReport): Observable<MyPowerbiReport> {
const config: IEmbedConfiguration = PowerbiHelper.createReportConfig(newMyPowerbiReport);
const microsoftReport: msReport = this.msPowerBiService
.embed(htmlElement, config) as msReport;
return fromEvent(microsoftReport, 'loaded')
.pipe(
tap(() => this.logger.debug('PowerBI: loaded')),
mergeMap(async() => {
this.logger.debug('PowerBI: embed pages loaded');
const msPages: Page[] = await microsoftReport.getPages();
this.logger.debug('PowerBI: msPages', msPages);
newMyPowerbiReport.pages = msPages.map((page: Page) => PowerbiHelper.msPageToEmbeddedPageMapper(page, newMyPowerbiReport));
this.logger.debug('PowerBI: newMyPowerbiReport pages updated', newMyPowerbiReport);
return newMyPowerbiReport;
}),
finalize(() => microsoftReport.off('loaded'))
);
}
好吧,调用了 mergeMap 中的 promise 并且 returns 结果,从记录器我可以看到 PowerBI:newMyPowerbiReport 页面更新和页面数组。但它什么都没有 returned。
终于修复了,这段代码没有任何问题,问题出在父方法中,我在父方法中使用了 forkjoin,似乎 forkjoin 没有订阅这个 observable,将 forkjoin 更改为 scan 万事如意。