节点JS + AWS承诺触发两次

时间:2017-12-04 14:47:16

标签: javascript node.js amazon-web-services aws-sdk

AWS = require('aws-sdk');
AWS.config.region = 'eu-west-1';
ses = new AWS.SES();

var params = {};

return ses.sendEmail(params, function (err, data) {
    console.log('----->sending email')
}).promise().then((data) => {
    console.log('---->sending promise')
}).catch((err) => {
    console.log('----->am in error')
    console.log(err)
})

有人可以帮助我上面的代码承诺被触发两次。

我应该在下面

----->发送电子邮件

---->发送承诺

但我得到了

----->发送电子邮件

---->发送承诺

----->发送电子邮件

1 个答案:

答案 0 :(得分:7)

看起来您正在提供回调函数和使用promise方法。实际上,这意味着您有两个不同的函数在请求完成时执行。

您可以使用承诺方法:

ses.sendEmail(params).promise().then((data) => {
    console.log('Email was sent')
}).catch((err) => {
    console.log('There was an error')
})

使用async / await。请务必在函数标题中添加async关键字。

try {
    const data = await ses.sendEmail(params).promise();
    console.log('Email was sent')
} catch(err) {
    console.log('There was an error')
}

或者您可以使用回调方法:

ses.sendEmail(params, function(err, data) {
    if (err) {
        console.log('There was an error')
        return
    }
    console.log('Email was sent')
})