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

时间:2017-04-03 23:43:14

标签: javascript lambda firebase-realtime-database aws-lambda firebase-admin

我正在使用firebase实时数据库和AWS Lambda + AWS API网关为数据库查询构建一个Web应用程序。我遇到的问题是AWS Lambda没有返回最新的项目。

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

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

我将添加我的aws lambda函数的代码片段。

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 个答案:

答案 0 :(得分:0)

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

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