将函数转换为Lambda中的Promise链

问题描述 投票:0回答:1

我正在尝试将我的Lambda代码转换为在Promise链中运行,但是我不确定要解决此问题的正确方法。我正在尝试修改当前代码以运行这些操作send email -> add to newsletter list if checkbox is checked,但是我尝试在add to newsletter]之后链接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)
  }

};

generateResponse:

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}}`
  };
};

addToNewsletter:

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);
  });
}

我正在尝试将我的Lambda代码转换为在Promise链中运行,但是我不确定要解决此问题的正确方法。我正在尝试修改当前代码以运行这些操作,发送电子邮件-> ...

javascript function promise aws-lambda
1个回答
0
投票

您不会从generateResponse函数返回任何诺言。因此,错误.then() is not a function。尝试更改您的函数以返回如下所示的Promise。

© www.soinside.com 2019 - 2024. All rights reserved.