在以下事件中.once事件正常工作
'use strict';
let firebase = require('firebase');
exports.handler = function(event, context)
{
context.callbackWaitsForEmptyEventLoop = false;
firebase.initializeApp({
serviceAccount: {},
databaseURL: "https://harmanconnectedcar-180411.firebaseio.com/"
});
firebase.database().ref('events').once('value').then(function(snapshot) {
console.log("*************event**********************")
console.log (snapshot.val()) ;
context.succeed() ;
});
var starCountRef = firebase.database().ref('events' );
starCountRef.on('value', function(snapshot) {
console.log("*************snapshot*****snapshot*****************")
console.log (snapshot.val()) ;
context.succeed();
})
}
当我尝试starCountRef.on时,我无法看到打印的日志
一旦我将lambda函数放入AWS并从firebase控制台写入firebase,我无法看到事件我需要在哪里查看日志如何检查starCountRef.on事件(我的意思是实时日志)< / p>
答案 0 :(得分:1)
你似乎在这里混合了两种技术。
onWrite
方法是Cloud Functions for Firebase的构造,(据我所知)无法在Amazon lambda上部署。
如果您想从Amazon Lambda访问Firebase实时数据库,可以使用Firebase Admin SDK。但是,这并不包括在编写数据库时触发代码的方法。
答案 1 :(得分:1)
您正在启动两个异步侦听器。然后当第一个完成时,你打电话给context.succeed()
。那时Lambda终止你的函数,所以第二个监听器永远不会完成。
要使此代码生效,您需要确保只在加载了所有数据时调用context.succeed()
。一种简单的方法是使用Promise.all()
:
exports.handler = function(event, context)
{
context.callbackWaitsForEmptyEventLoop = false;
firebase.initializeApp({
serviceAccount: {},
databaseURL: "https://harmanconnectedcar-180411.firebaseio.com/"
});
var starCountRef = firebase.database().ref('events' );
var promises = [];
promises.push(firebase.database().ref('events').once('value'));
promises.push(starCountRef.once('value');
Promises.all(promises).then(function(snapshots) {
snapshot.forEach(function(snapshot) {
console.log(snapshot.val();
});
context.succeed();
});
}