我可以像这样使用async
await
吗?我在这里杀了async/await
吗?
以下代码正常运行,我知道async/await
仅适用于Promise<T>
。我的getItem
是Observable
。感谢。
roleService.getItem({ page: p.pageIndex + 1, pageSize: p.pageSize })
.takeUntil(this.unsubscribe$)
.map((res: ResponseDto) => <DtoModel>res.contentBody)
.do(async (dto: DtoModel) => await this.subject.next(dto.content)) // working wihtout error
.subscribe(async (dto: DtoModel) => await (this.pager = dto.pager), //working without error
(error: any) => Observable.throw(error));
答案 0 :(得分:2)
您可以按照您的方式使用async
功能,但在您的示例中它不起作用。您必须了解async
函数返回一个承诺:
const fn = async function() {};
fn() instanceof Promise
因此,如果您在可观察链中使用它,您将收到一个承诺:
interval(500)
.first()
.map(async (v) => {
return v;
})
.subscribe((v) => {
console.log(v instanceof Promise); // logs `true`
});
您构建示例的方式不会对observables链产生任何影响,因为do
运算符的输出被忽略,并且subscribe
的输出没有监听器} 打回来。所以基本上没有理由在那里使用async
。
如果您希望等到async
函数解析并获取该函数的结果,请使用mergeMap
运算符:
interval(500)
.first()
.map(async (v) => {
return v;
})
.mergeMap((p) => {
return p;
})
.subscribe((v) => {
console.log(v);
});