打字稿asynchronous/等待与Observable或承诺
我可以像这样使用async
吗? 我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));
你可以像你一样使用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
callback的输出的监听器。 所以基本上没有理由在那里使用async
。
如果您想要等到async
函数parsing并获取该函数的结果,请使用mergeMap
运算符:
interval(500) .first() .map(async (v) => { return v; }) .mergeMap((p) => { return p; }) .subscribe((v) => { console.log(v); });