Функция преобразования в цепочку обещаний в Lambda - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь преобразовать свой лямбда-код для выполнения в цепочке обещаний, но я не уверен в правильном подходе к этому. Я пытаюсь изменить мой текущий код для выполнения этих действий, 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);
  });
}

1 Ответ

1 голос
/ 06 октября 2019

Вы не возвращаете обещание от функции generateResponse. Отсюда и ошибка .then() is not a function. Попробуйте изменить свою функцию, чтобы вернуть обещание, как показано ниже.

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}}`
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...