javascript - 在 Lambda 中将函数转换为 promise 链

标签 javascript function promise aws-lambda

我正在尝试将我的 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/

相关文章:

javascript - 如何使用两个参数进行完全匹配搜索?

javascript - 用于对数据进行排序的多个 (2) 哈希 URL 参数

javascript - Linq Help 需要从 sql 模型转换为 Linq 对象模型

javascript - 关于在 firebase 云函数中 promise 的 then 回调中返回空值的问题

Javascript Promise 过早解析

javascript - 为什么我的 Promise 定义会被执行?

javascript - bookshelf.js 未加载关系

php - 在 Python 中,您可以将一个变量分配给一个函数,然后将参数传递给该变量,您如何称呼该功能?

javascript - 有没有标准的javascript函数可以将字符串转换为电话号码格式,反之亦然?

C语言。奇怪的函数行为