2016-07-31 7 views
0

Ich habe ein Problem mit meiner Lambda-Funktion. Es nimmt die Daten der Geräte und sendet die Push-Benachrichtigung (Informationen, dass jemand Sie zu Freunden hinzugefügt hat). Es kommt jedoch häufig vor, dass die Push-Benachrichtigung nicht gesendet wird. Manchmal muss ich die Funktion mehrmals aktivieren (durch gleichzeitiges Klicken auf die Schaltfläche), um Push-Benachrichtigungen zu senden. Beim Testen der folgenden Funktion in Lambda sendet es keine Push-Benachrichtigungen. Was könnte das Problem sein?Senden SNS Push durch Lambda - keine Nachricht?

Vielen Dank im Voraus, John

console.log("Loading friend-request function"); 
var AWS = require("aws-sdk"); 

exports.handler = function(event, context) { 

    var senderID = event.senderID; 
    var receiverID = event.receiverID; 
    var message = event.message; 

    var eventText = JSON.stringify(event); 
    console.log("Received event:", eventText); 
    var sns = new AWS.SNS(); 
    var params = { 
     Message: message, 
     Subject: "Test SNS From Lambda", 
     TargetArn: receiverID 
    }; 

    context.succeed(message); 
    sns.publish(params, context.done); 

}; 

Antwort

2

Denken Sie daran, dass die sns.publish() Funktion asynchron ist, das heißt Sie müssen warten, bis es abgeschlossen ist, bevor Sie die context.succeed() aufrufen können. Andernfalls kann die Lambda-Funktion beendet werden, bevor die Nachricht veröffentlicht wurde.

exports.handler = function(event, context) { 
    // same as before... 

    var params = {...} 

    // do not call context.succeed() yet 

    sns.publish(params, function(err, data) { 
     if (err) { 
      console.log('Failed to publish SNS message'); 
      context.fail(err); 
     } 
     else { 
      console.log('SNS message published successfully'); 
      context.succeed(data); 
     } 
    }); 
}; 
+0

Das funktioniert, danke! :) –