我正在尝试将我的 lambda 代码转换为在 promise 链中运行,但我不确定解决此问题的正确方法。我正在尝试修改我当前的代码来运行这些操作,发送电子邮件 -> 如果选中复选框,则添加到新闻通讯列表
,但我的电子邮件部分成功运行,然后在我尝试链接generateResponse(result, 200)
添加到新闻通讯
函数
这是我的错误:
TypeError: generateResponse(...).then is not a function
这是代码:
主要功能:
module.exports.sendEmail = async event => {
const { body } = event;
const data = JSON.parse(body);
try {
const result = await messageContent(data);
return generateResponse(result, 200)
.then(function(){
if(data.subscribe == "on"){
return addToNewsletter(data.from, data.topic)
.then(function(result){
return generateResponse(result, 200);
});
}
});
} catch(err) {
console.log(err)
}
};
生成响应:
const generateResponse = (body, statusCode) => {
console.log("generateResponse")
console.log(body)
return {
headers: {
"access-control-allow-methods": "POST",
"access-control-allow-origin": "*",
"content-type": "application/json"
},
statusCode: statusCode,
body: `{\"result\": ${body.message}}`
};
};
添加新闻通讯:
const addToNewsletter = (email, topic) => {
const mg = mailgun({apiKey: API_KEY, domain: NEWSLETTER_DOMAIN});
const list = mg.lists(`newsletter@{DOMAIN}`);
console.log(list)
const subscriber = {
address: email,
vars: {
topic: topic
},
subscribed: "yes",
upsert: "yes"
};
console.log(subscriber);
return list.members().create(subscriber, function(err, data){
console.log(data);
console.log(err);
});
}
最佳答案
您没有从generateResponse函数返回任何 promise 。因此错误.then() is not a function
。尝试更改您的函数以返回如下所示的 promise 。
const generateResponse = (body, statusCode) => {
console.log("generateResponse")
console.log(body)
return Promise.resolve({
headers: {
"access-control-allow-methods": "POST",
"access-control-allow-origin": "*",
"content-type": "application/json"
},
statusCode: statusCode,
body: `{\"result\": ${body.message}}`
});
};
关于javascript - 在 Lambda 中将函数转换为 promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258537/