gpt4 book ai didi

javascript - 如何将带有异步等待功能的 promise 更改为可观察的?

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

我有一个带有 Controller 和服务的 Nestjs 休息服务器。

在我的 Controller 中,有get函数,当有人发出get请求时:

@Get()
getAllFoos() {
return this.fooService.getAllFoos();
}

在我的服务中,有这个函数可以从数据库中获取文档

 async getAllFoos(): Promise<foos[]> {
try {
return await this.fooModel.find().exec();
} catch(e) {
return e;
}

这行得通!我现在需要更改它以使其与可观察对象一起使用。我将 Controller 更改为:

@Get()
getAllFoos() {
this.fooService.getAllFoos().subscribe(
response => {
console.log(response);

},
error => {
console.log(error);
},
() => {
console.log('completed');

});
}

为此服务:

    getAllFoos(): Observable<foos[]> {
try {
this.fooModel.find().exec();
} catch(e) {
return e;
}
}

我得到的错误是

[Nest] 7120   - 2019-2-20 15:29:51   [ExceptionsHandler] Cannot read property 'subscribe' of undefined +4126ms

错误来自

this.fooService.getAllFoos().subscribe(

来自 Controller 的这一行。我真的不知道要更改什么才能使其现在正常工作。

感谢任何帮助或想法!

最佳答案

Promise 不能转换为 Observable。使用 Observable.from() 方法 ( docs ) 创建一个可观察对象。

getAllFoos(): Observable<foos[]> {
return Observable.from(this.fooModel.find().exec());
}

rxjs 版本 <6:

getAllFoos(): Observable<foos[]> {
return Observable.fromPromise(this.fooModel.find().exec());
}

关于javascript - 如何将带有异步等待功能的 promise 更改为可观察的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54788978/

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