Обновление таблицы Amazon DDB с узла теперь после ответа на отправленный запрос - PullRequest
0 голосов
/ 22 мая 2019

Я хочу добавить строку в таблицу Amazon DDB из приложения узла, развернутого на Zeit - теперь каждый раз, когда я получаю запрос после публикации, но после отправки ответа на запрос после отправки. Мой ddb.putItem останавливается как ожидающее обещание, и никакие ошибки не зарегистрированы. Я не понимаю почему.

Приложение - слабый бот. Я получаю сообщение от слабого API, и он запускает ответ моего бота. Я хочу быстро отправить 200, чтобы избежать повторной отправки сообщения. Я пробовал разные подходы, используя EventEmitter или res.on('finish'... Я проверил, что модуль, отправляющий обновление таблицы в ddb, работает так же, как когда я запускаю его из узла командной строки, он работает. Но ни от now dev, ни от развернутого сейчас приложения это не так.

Я сделал упрощенный тестовый пример в этом репозитории: https://github.com/halas/now-test-case

В основном точка входа для приложения узла выглядит следующим образом:

const send  = require('./send.js');

module.exports = (req, res) => {
  res.on('finish', send);
  res.end(`Hello from Node.js on Now 2.0!`);
  console.log('still here'); // this gets logged
};

И отправляющий модуль:

[ require aws-sdk and set credentials ]

const ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
module.exports = () => {
  let params = {
    TableName: 'now-test-case',
    Item: {
      'id': { N: String(Date.now()) },
      'message': { S: 'hello World' },
    }
  };
  console.log('hello'); //we get here

  try {
  console.log('try'); //we get here
    const data = ddb.putItem(params).promise();
    console.log(data); //this is pending promise now
    data
      .then((data) => {console.log(data)})
      .catch((error) => {console.log(error)});
    // and it never gets resolved or rejected
  } catch(e) {
    console.log(e); //and no error catched here either
  }
};

По предложению Роба Эванса в чате Zeit Spectrum я подготовил версию с async-await (на ветке в тестовом репо), но результаты те же.

Я ожидаю получить обновление на DynamoDB (исправленное обещание). Пока я получаю только ожидающее обещание и теперь решаю или отклоняю.

...