如何将带有异步等待功能的承诺更改为可观察的?

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());
}