首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已收到的多个通知

已收到的多个通知
EN

Stack Overflow用户
提问于 2016-05-12 02:33:39
回答 2查看 921关注 0票数 1

我有一个API方法调用Lambda Node.js函数。Lambda函数调用SNS并向我的iPhone发布APNS通知。当我在AWS控制台中调用API网关或Lambda函数时,我得到一个预期的通知。在命令行(Grunt和Node.js)上运行Lambda代码时,我还会收到一个通知。在运行eclipse的javascript时,我还会收到一个通知。

然而,当我发布到API网关时,我会收到2-5个通知。每件事看起来都一样。我检查了Cloudwatch日志,每次只发送一个请求。有人知道怎么调试这个吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-14 01:11:26

我想通了。我的函数位于exports.handler函数之外:

代码语言:javascript
复制
var AWS = require('aws-sdk');
var sns = new AWS.SNS();

var myAlerter = function(){

    var numSent = 0;
    var callback;
    var arn = "arn:aws:sns:us-west-2:45435475457:endpoint/APNS/MyAlerter/5a11c61f-1122-3344-5566-656845463";

    var sendNotification = function(messageText){

            var apns = {
                    aps : {
                        alert : messageText,
                        sound : 'default'
                    }
            };
            var message = {
                    "APNS" : JSON.stringify(apns)
            };
            message = JSON.stringify(message);

            var params = {
                    Message: message, 
                    MessageStructure: 'json',
                    TargetArn: arn
            };

            numSent++;
            sns.publish(params, function(err, data){
                if (err){
                    callback(err, err.stack);
                }else {
                    var result = {
                            error: false,
                            numSent : numSent,
                            data: data
                    };              

                    callback(false,result);
                }
            });            
    };

    return {

        alert : function(message, cb){
            callback = cb;
            sendNotification(message);
        }

    }

}();

exports.handler = function(event, context){

    var alertedCallback = function(error, data){
        if (error){
            context.done(error);
        } else {
            context.succeed(data);
        }
    };          

    myAlerter.alert(event.message, alertedCallback);

};

每次我调用API并调用我的Lambda函数时,numSent变量都会增加。我想把我的函数放在exports.handler中可以确保我的函数不是全局的或者其他什么的。

票数 0
EN

Stack Overflow用户

发布于 2016-05-14 00:59:25

我也有过类似的经历。对我来说,这是因为我没有正确地调用成功的回调。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37176290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档