Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AWS Lambda中的Firebase实时数据库查询无法获得最新结果_Javascript_Lambda_Firebase Realtime Database_Aws Lambda_Firebase Admin - Fatal编程技术网

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

Javascript AWS Lambda中的Firebase实时数据库查询无法获得最新结果,javascript,lambda,firebase-realtime-database,aws-lambda,firebase-admin,Javascript,Lambda,Firebase Realtime Database,Aws Lambda,Firebase Admin,我正在使用firebase实时数据库和AWS Lambda+AWS API网关构建一个web应用程序,用于数据库查询。我遇到了一个问题,AWS Lambda不返回最新的项目 例如,如果my db有项目A、B、C,其中C是最新的。如果我使用lambda函数进行查询,它将返回A、B、C。如果我添加D,lambda“可能返回A、B、C、D,也可能不返回。它可能只返回A、B、C。这非常令人沮丧,我无法找到根本原因。我只能假设它与lambda的冻结过程实现有关。或者,这可能与firebase实时数据库的性

我正在使用firebase实时数据库和AWS Lambda+AWS API网关构建一个web应用程序,用于数据库查询。我遇到了一个问题,AWS Lambda不返回最新的项目

例如,如果my db有项目A、B、C,其中C是最新的。如果我使用lambda函数进行查询,它将返回A、B、C。如果我添加D,lambda“可能返回A、B、C、D,也可能不返回。它可能只返回A、B、C。这非常令人沮丧,我无法找到根本原因。我只能假设它与lambda的冻结过程实现有关。或者,这可能与firebase实时数据库的性质有关,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);
    });
};
var admin=require(“firebase admin”);
var servicecomport=require(“myserviceaccount”);
var app=admin.initializeApp({
凭证:管理员凭证证书(serviceAccount),
数据库URL:
});
exports.handler=(事件、上下文、回调)=>{
context.callbackhaitsforemptyeventloop=false;
var项目=[];
var filter=event.params.querystring.filter;
admin.database().ref('items').orderByChild('filter').equalTo(filter).limitToLast(20)
.on('value',函数(快照){
snapshots.forEach(函数(快照){
变量项={
itemId:snapshot.getKey(),
数据:snapshot.val()
};
项目。推送(项目);
});
回调(空,提要);
});
};

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


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

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


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

您在哪里分离侦听器?就在回调之前…您是否按照此处的说明分离calling.off():您在哪里分离侦听器?就在回调之前…您是否按照此处所述分离calling.off():