如何将带有异步等待功能的承诺更改为可观察的?
How to change a promise with async await function to observable?
我有一个带控制器和服务的 Nestjs 休息服务器。
在我的控制器中,有get函数,当有人发出get请求时:
@Get()
getAllFoos() {
return this.fooService.getAllFoos();
}
在我的服务中,有这个函数可以从数据库中获取文档
async getAllFoos(): Promise<foos[]> {
try {
return await this.fooModel.find().exec();
} catch(e) {
return e;
}
这有效!
我现在需要更改它以使其与可观察对象一起使用。
我将控制器更改为:
@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(
此行来自控制器。我真的不知道要改变什么才能让它现在工作。
感谢任何帮助或想法!
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());
}
我有一个带控制器和服务的 Nestjs 休息服务器。
在我的控制器中,有get函数,当有人发出get请求时:
@Get()
getAllFoos() {
return this.fooService.getAllFoos();
}
在我的服务中,有这个函数可以从数据库中获取文档
async getAllFoos(): Promise<foos[]> {
try {
return await this.fooModel.find().exec();
} catch(e) {
return e;
}
这有效! 我现在需要更改它以使其与可观察对象一起使用。 我将控制器更改为:
@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(
此行来自控制器。我真的不知道要改变什么才能让它现在工作。
感谢任何帮助或想法!
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());
}