首页 > 解决方案 > Observable 在 Lambda 中的处理方式是否与 Promise 不同?

问题描述

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

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

Observable 在 Lambda 中的处理方式是否与 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)
        );
    }

标签: typescriptaws-lambdarxjsnestjs

解决方案


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


一些额外的想法:@nestjs/cqrsSaga 的输出是命令的 Observable。模块订阅 Observable 并通过CommandBus.

以我对 AWS Lambda 函数和@nestjs/cqrs模块的理解,我不相信您能够从 a中返回 a Observable,更不用说 a了。Promise@Saga


推荐阅读