gpt4 book ai didi

javascript - 使用 Observable 或 Promise 的 Typescript async/await

转载 作者:搜寻专家 更新时间:2023-10-30 21:39:29 25 4
gpt4 key购买 nike

我可以使用 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 函数返回一个 promise :

const fn = async function() {};
fn() instanceof Promise

因此,如果您在可观察链中使用它,您将收到一个 promise :

interval(500)
.first()
.map(async (v) => {
return v;
})
.subscribe((v) => {
console.log(v instanceof Promise); // logs `true`
});

您构建示例的方式不会对可观察链产生任何影响,因为 do 运算符的输出会被忽略,并且 subscribe 的输出没有监听器> 回调。所以基本上没有理由在那里使用 async

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

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

关于javascript - 使用 Observable 或 Promise 的 Typescript async/await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com