AWS Lambda 中的 Firebase 实时数据库查询未获得最新结果

Posted

技术标签:

【中文标题】AWS Lambda 中的 Firebase 实时数据库查询未获得最新结果【英文标题】:Firebase realtime db query in AWS Lambda does not get most up to date result 【发布时间】:2017-08-28 23:52:30 【问题描述】:

我正在使用 firebase realtime db 和 AWS Lambda + AWS API Gateway 构建一个用于数据库查询的 Web 应用程序。我遇到了 AWS Lambda 不返回最新项目的问题。

例如,如果我的数据库有项目 A、B、C,其中 C 是最新的。如果我使用 lambda 函数查询,它将返回 A、B、C。如果我添加 D,则 lambda “可能或可能不会” 返回 A、B、C、D。它可能只是返回A,B,C。这非常令人沮丧,我找不到根本原因。我只能假设它与 lambda 的冻结过程实现有关。或者也许它与firebase的实时数据库的性质有关,它监听数据的变化?我不确定。

如果有人遇到类似问题并找到解决方案,请分享解决方案。

我将添加我的 aws lambda 函数的代码 sn-p。

var admin = require("firebase-admin");
var serviceAccount = require("myserviceaccount");

var app = admin.initializeApp(
    credential: admin.credential.cert(serviceAccount),
    databaseURL: <firebaseDB>
);

exports.handler = (event, context, callback) => 
    context.callbackWaitsForEmptyEventLoop = false;

    var items = [];
    var filter = event.params.querystring.filter;
    admin.database().ref('items').orderByChild('filter').equalTo(filter).limitToLast(20)
    .on('value', function(snapshots) 
        snapshots.forEach(function(snapshot) 
            var item = 
                itemId: snapshot.getKey(),
                data: snapshot.val()
            ;
            items.push(item);
        );
        callback(null, feeds);
    );
;

问候,

【问题讨论】:

【参考方案1】:

对于可能对此问题的解决方案感兴趣的任何人。

我能够通过在回调之前分离监听器来解决这个问题。 Firebase 数据库是实时的,它会在您从数据库中查询时添加侦听器。看起来当侦听器在 lambda 中处于活动状态时,lambda 实例会保持侦听器并且查询不会获得最新的项目。通过手动分离监听器,我能够解决这个问题。

【讨论】:

你在哪里分离监听器?就在回调之前......你是否分离调用 .off() 如此处记录:firebase.google.com/docs/database/web/read-and-write

以上是关于AWS Lambda 中的 Firebase 实时数据库查询未获得最新结果的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 身份验证与 AWS Cognito [关闭]

使用 AWS Lambda (NodeJS) 创建 AWS AppSync

如何通过 Amazon ElasticSearch 托管服务,对 VPC 中的网络流量进行实时监控

来自 AWS lambda 的内存中查找

AWS Lambda 可以与外部 Internet 服务对话吗?

AWS 无服务器 Java Lambda 调试