打字稿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操作符的输出被忽略,并且没有来自subscribecallback的输出的监听器。 所以基本上没有理由在那里使用async

如果您想要等到async函数parsing并获取该函数的结果,请使用mergeMap运算符:

 interval(500) .first() .map(async (v) => { return v; }) .mergeMap((p) => { return p; }) .subscribe((v) => { console.log(v); });