【问题标题】:Does an Observable get handled differently in Lambda than a Promise?Observable 在 Lambda 中的处理方式是否与 Promise 不同?
【发布时间】:2019-11-19 20:18:41
【问题描述】:

我们在我们的应用程序中使用 NestJS CQRS 包。这个包允许我们通过生成触发各种后台任务的 RxJS Observables 来创建“sagas”。

然而,我们注意到在 AWS Lambda 上运行应用程序时,该函数在后台任务完成之前完成。

在 Lambda 中对 Observable 的处理方式是否与 Promise 不同?

@Saga()
aggregateCreated = (events$: Observable<any>): Observable<AggregateCommand> => {
        return events$.pipe(
            ofType(AggregateCreatedEvent),
            map(async (event: AggregateCreatedEvent) => {

                const result = this.queueService.sendMessage(
                    "http://XXXXXXX", { test: "MessageContent });

                await Promise.all([result]);
                return;
            }),
            flatMap(c => c)
        );
    }

【问题讨论】:

  • 您能否分享更多代码来帮助您的 lambda 在本地和在线运行?我知道您在不同的帖子中提到这在本地有效,但在部署时无效,这可能有助于我解决问题。

标签: typescript aws-lambda rxjs nestjs


【解决方案1】:

ObservablePromise 的 API 非常不同,我还没有找到任何支持在 AWS Lambda 函数中返回 Observable 的文档。


一些额外的想法:@nestjs/cqrs Saga 的输出是命令的 Observable。模块订阅 Observable 并通过CommandBus 执行新命令。

根据我对 AWS Lambda 函数和 @nestjs/cqrs 模块的了解,我认为您无法从 @Saga 返回 Observable,更不用说 Promise

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2017-06-29
    • 2016-10-31
    相关资源
    最近更新 更多