如何使用async await函数将promise更改为observable?

问题描述 投票:2回答:1

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

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

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

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

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

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

@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(

来自控制器的这一行。我真的不知道如何改变以使它现在起作用。

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

javascript typescript observable es6-promise nestjs
1个回答
3
投票

承诺不能被视为可观察的。使用Observable.from()方法(docs)创建一个observable。

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

rxjs版本<6:

getAllFoos(): Observable<foos[]> {
    return Observable.fromPromise(this.fooModel.find().exec());
}
© www.soinside.com 2019 - 2024. All rights reserved.