Node.js 无法在基于my NodeJS的lambda中回拨getSignedUrl中调用AWS SES sendEmail函数
我正在尝试从我的lambda发送通过使用aws ses调用S3的getSigned url获得的url,如下所示:Node.js 无法在基于my NodeJS的lambda中回拨getSignedUrl中调用AWS SES sendEmail函数,node.js,amazon-web-services,amazon-s3,aws-lambda,amazon-ses,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Ses,我正在尝试从我的lambda发送通过使用aws ses调用S3的getSigned url获得的url,如下所示: exports.handler = async (event) => { ...... ..... var signedUrl = await s3.getSignedUrl( "getObject", parameters, (error, url) => { if (error) {
exports.handler = async (event) => {
......
.....
var signedUrl = await s3.getSignedUrl(
"getObject",
parameters,
(error, url) => {
if (error) {
console.log("Error writing to S3", error);
} else {
console.log("Pre-signed url: " + url);
var eparam = {
Destination: {
CcAddresses: ["abc@abc.com"],
ToAddresses: ["xyz@xyz.com"],
},
Message: {
Body: {
Html: {
Charset: "UTF-8",
Data: url // sending url as part of the email
},
Text: {
Charset: "UTF-8",
Data: "TEXT_FORMAT_BODY",
},
},
Subject: {
Charset: "UTF-8",
Data: "Test email",
},
},
Source: "abc@abc.com" /* required */,
ReplyToAddresses: [
"xyz@xyz.com",
],
};
console.log("compiling email... parameters ready", eparam);
var sendPromise = new AWS.SES().sendEmail(eparam).promise();
sendPromise
.then(function (data) {
console.log("Success!! ", data.MessageId);
})
.catch(function (err) {
console.error(err, err.stack);
});
}
}
);
};
问题是我无法发送电子邮件,因为代码既没有输入sendPromise的“.then(函数(数据)”块,也没有捕获“.catch(函数(错误)”中的任何错误'部分。这里有什么我做错了吗?当我尝试在getSignedUrl方法的回调部分之外发送电子邮件时,我能够发送电子邮件(当然没有url!)但是,由于我们需要在电子邮件正文中嵌入url,因此我们必须能够在回调中嵌入url。我们可以采用任何方法吗?您应该避免混合使用回调和承诺,因为您可能会遇到这样的问题。请尝试将
getSignedUrl
转换为:
另外,请确保您正在返回lambda处理程序的承诺:
如果您没有从异步处理程序返回承诺,lambda函数可能会在您的承诺得到解决之前完成。感谢您快速而准确的响应。我们能够实现这一点:)