2017-10-10 64 views
0

在下面的事件。一旦事件是工作的罚款对火力的事件与AWS拉姆达工作

'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我不能够看到打印的日志

一旦我把AWS函数放入AWS并从Firebase控制台写入firebase,我无法查看哪些事件需要查看日志如何检查starCountRef.on事件(我的意思是实时日志)

回答

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(); 
    }); 
} 
+0

刚刚在上面的代码中移除了context.succeed(),但工作正常,但Lambda函数函数在30秒后超时了我得到了如何保持活着 – DhanaLaxshmi

+0

lambda的'context.succeed()'信号表明函数是完成其工作。这是在无服务器/ FaaS环境中运行的关键部分。如果你不想调用'context.succeed()',那么你可以省去一些麻烦,然后在常规的Node.js环境中运行。 –

0

您似乎在这里混合使用两种技术。

onWrite方法是Cloud Functions for Firebase的构造,据我所知,它不能在Amazon lambda上部署。

如果要从Amazon Lambda访问Firebase实时数据库,可以使用Firebase Admin SDK。但是,这不包括在写入数据库时​​触发代码的方法。

+0

是的,我得到了请检查更新的问题 – DhanaLaxshmi

+0

这急剧变化的问题,所以我贴一个单独的答案。 –