AWS Lambda 中的 Firebase 实时数据库查询未获得最新结果
Firebase realtime db query in AWS Lambda does not get most up to date result
我正在使用 firebase 实时数据库和 AWS Lambda + AWS API 数据库查询网关构建一个网络应用程序。我 运行 遇到 AWS Lambda 没有 return 最新项目的问题。
例如,如果我的数据库有项目 A、B、C,其中 C 是最新的。如果我使用 lambda 函数查询,它将 return A、B、C。如果我添加 D,lambda "may or may not" return A, B、C、D。它可能只是 return 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);
});
};
此致,
对于可能对此问题的解决方案感兴趣的任何人。
我能够通过在回调之前分离侦听器来解决问题。 Firebase 数据库是实时的,当您从数据库查询时它会添加监听器。看起来当侦听器在 lambda 中处于活动状态时,lambda 实例会保留侦听器并且查询不会获取最新的项目。通过手动分离侦听器,我能够解决这个问题。
我正在使用 firebase 实时数据库和 AWS Lambda + AWS API 数据库查询网关构建一个网络应用程序。我 运行 遇到 AWS Lambda 没有 return 最新项目的问题。
例如,如果我的数据库有项目 A、B、C,其中 C 是最新的。如果我使用 lambda 函数查询,它将 return A、B、C。如果我添加 D,lambda "may or may not" return A, B、C、D。它可能只是 return 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);
});
};
此致,
对于可能对此问题的解决方案感兴趣的任何人。
我能够通过在回调之前分离侦听器来解决问题。 Firebase 数据库是实时的,当您从数据库查询时它会添加监听器。看起来当侦听器在 lambda 中处于活动状态时,lambda 实例会保留侦听器并且查询不会获取最新的项目。通过手动分离侦听器,我能够解决这个问题。