2017-10-10 14 views
0

で作業されていないはイベント.once次のイベントでは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に入れ、firebaseコンソールからfirebaseに書き込むと、ログを見る必要があるイベントを見ることができません。starCountRef.onイベントをチェックする方法(リアルタイムログを意味します)

答えて

1

あなたは2つの非同期リスナーを開始しています。その後、最初のものが終了したらcontext.succeed()に電話してください。その時点で、ラムダは関数を終了させるため、2番目のリスナは決して完了しません。

このコードを機能させるには、すべてのデータがロードされたときに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

'context.succeed()'はLambdaに関数があることを知らせますその仕事で終わった。これは、サーバーレス/ FaaS環境で実行する上で非常に重要です。 'context.succeed()'を呼びたくない場合は、通常のNode.js環境で実行することもできます。 –

0

あなたは2つの技術を混在させているようです。

onWriteメソッドはCloud Functions for Firebaseのコンストラクタです(私が知る限り)Amazonラムダにはデプロイできません。

Amazon LambdaからFirebaseリアルタイムデータベースにアクセスする場合は、Firebase Admin SDKを使用できます。しかし、データベースに書き込まれるたびにコードをトリガーする方法はありません。

+0

はい私は劇的に疑問を変更、更新、質問 – DhanaLaxshmi

+0

を確認してくださいということだ、私は別の答えを投稿しました。 –