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

Kla*_*axx 3 javascript observable typescript es6-promise nestjs

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

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

@Get()
getAllFoos() {
    return this.fooService.getAllFoos();
}
Run Code Online (Sandbox Code Playgroud)

在我的服务中,有一个从数据库获取文档的功能

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

这有效!我现在需要更改它以使其与可观察量一起使用。我将控制器更改为:

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

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

    });
}
Run Code Online (Sandbox Code Playgroud)

以及对此的服务:

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

我得到的错误是

[Nest] 7120   - 2019-2-20 15:29:51   [ExceptionsHandler] Cannot read property 'subscribe' of undefined +4126ms
Run Code Online (Sandbox Code Playgroud)

错误来自

this.fooService.getAllFoos().subscribe(
Run Code Online (Sandbox Code Playgroud)

这条线来自控制器。我真的不知道要改变什么才能让它现在起作用。

任何帮助或想法表示赞赏!

Sam*_*ipp 5

Promise 不能被转换为 Observable。使用方法创建可观察对象Observable.from()文档)。

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

rxjs 版本 < 6:

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