如果firebase事件无法使用AWS lambda

时间:2017-10-10 10:07:55

标签: node.js firebase firebase-realtime-database aws-lambda

在以下事件中.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>

2 个答案:

答案 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();
    });
}