2017-10-10 44 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

這急劇變化的問題,所以我貼一個單獨的答案。 –