2017-10-10 1 views
0

In der folgenden Ereignis .Sobald Veranstaltung funktioniert gutauf Veranstaltung von Feuerbasis mit AWS Lambda

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

}

Wenn ich starCountRef.on nicht funktioniert versuche ich nicht in der Lage bin, die Protokolle gedruckt zu sehen

Sobald ich die Lambda-Funktion in AWS und schreibe auf Firebase von Firebase-Konsole Ich bin nicht in der Lage, die Ereignisse zu sehen, wo brauche ich die Protokolle sehen, wie StarCountRef.on Ereignis überprüfen (ich meine die Echtzeit-Protokolle)

Antwort

1

Sie starten zwei asynchrone Listener. Dann, wenn der erste von ihnen fertig ist, rufen Sie context.succeed(). An diesem Punkt beendet Lambda Ihre Funktion, so dass der zweite Listener niemals beendet wird.

Damit dieser Code funktioniert, müssen Sie sicherstellen, dass Sie nur context.succeed() aufrufen, wenn alle Daten geladen sind. Eine einfache Möglichkeit, dies zu tun ist durch Promise.all() mit:

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

gerade entfernt context.succeed() in den obigen Code, der funktioniert gut, aber Lambda-Funktion Funktion wurde nach 30 Sekunden abgelaufen bin ich bekomme, wie ich für immer leben – DhanaLaxshmi

+0

Die 'context.succeed()' signalisiert Lambda, dass die Funktion ist getan mit seiner Arbeit. Es ist ein entscheidender Teil des Betriebs in einer Serverless/FaaS-Umgebung. Wenn Sie 'context.succeed()' nicht aufrufen möchten, können Sie sich die Mühe sparen und in einer normalen Node.js-Umgebung laufen. –

0

Sie scheinen hier zwei Technologien zu vermischen.

Die onWrite Methode ist ein Konstrukt von Cloud Functions for Firebase, die (soweit ich weiß) kann nicht auf Amazon Lambda eingesetzt werden.

Wenn Sie auf Ihre Firebase Realtime Database von Amazon Lambda zugreifen möchten, können Sie die Firebase Admin SDK verwenden. Aber das beinhaltet keine Möglichkeit, den Code auszulösen, wenn die Datenbank geschrieben wird.

+0

Ja, ich habe das bitte die aktualisierte Frage – DhanaLaxshmi

+0

überprüfen, dass die Frage drastisch verändert, so dass ich gepostet eine separate Antwort. –