2016-07-21 7 views
0

Wie bekomme ich die Daten von einem Lambda, das mit einem Ereignis aufgerufen wurde, an die aufrufende Funktion zurück?Gibt Daten von asynchronem AWS Lambda zurück

Wesentlichen die Lambda-Funktion, die ich habe, ist:

exports.handler = function(event, context, callback) { 
    var data = {}; 
    data.foo ='hello'; 
    callback(null, data) 
} 

und der auslösende Funktion sieht wie folgt aus:

var AWS = require('aws-sdk'); 

var lambda = new AWS.Lambda(); 
var params = { 
    FunctionName: 'SomeFunction', 
    InvocationType: 'Event' 
}; 

lambda.invoke(params, function (err, data) { 
    if (err) { 
     console.log(err, err.stack); // an error occurred 
    } else { 
     console.log(JSON.stringify(data, null, 2)); 
    } 
}); 

aber das einzige, was ich aus der Funktion zurück ist

{ 
    "StatusCode": 202, 
    "Payload": "" 
} 

Ich dachte, der Punkt des Callback-Parameters war es, der aufrufenden Funktion zu ermöglichen, die Daten zu bekommen a wenn die Funktion beendet ist. Verwende ich es falsch oder ist das, was ich mit Lambdas nicht möglich bin?

Antwort

-2

Ich bin mir nicht sicher über die Verwendung von Rückruf, aber Sie können Kontext verwenden, um Daten zurückzugeben. In Ihrem Fall versuchen:

exports.handler = function(event, context, callback) { 
    var data = {}; 
    data.foo ='hello'; 
    context.done(null, data); 
} 
5

Wenn Sie die Lambda-Funktion rufen Sie die InvocationType-'RequestResponse' statt 'Event' einstellen müssen.

Bei Verwendung des Typs Event wird Ihr Rückruf aufgerufen, wenn die Nutzlast von den AWS-Servern empfangen wurde. Wenn Sie den Typ RequestResponse verwenden, wird Ihr Rückruf erst aufgerufen, nachdem die Lambda-Funktion abgeschlossen wurde, und Sie erhalten die Daten, die er für seinen Rückruf bereitgestellt hat. Es ist nicht möglich, mit dem Typ Event zu tun, was Sie wollen.

+0

Ist es nicht möglich mit dem Typ "Event" zu arbeiten? Ich dachte, der Punkt des Callback-Parameters war, dass die aufrufende Funktion in der Lage war, die Daten aus dem Lambda abzurufen, wenn sie fertig war. – user2127726

+0

@ user2127726 siehe Bearbeiten. – idbehold

+0

Schande. 'Sie können den optionalen Callback verwenden, um Informationen an den Aufrufer zurückzugeben, ansonsten Rückgabewert ist null', das hat es so klingen lassen, als könnte ich den Callback verwenden, um das Ergebnis des Aufrufs zurückzugeben – user2127726