0

我想从部署在 Zeit 上的节点应用程序向 Amazon DDB 表添加行,每次我收到一个发布请求但发送对发布请求的响应之后。我的 ddb.putItem 作为待处理的承诺停止,并且没有记录任何错误。我不明白为什么。

该应用程序是一个松弛的机器人。我从 slack api 收到一条消息,它会触发我的机器人的响应。我想快速发送 200 到 slack 以避免再次发送消息。我尝试了不同的方法,使用 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
  }
};

正如 Rob Evans 在 Zeit Spectrum 聊天中所建议的那样,我准备了带有 async-await 的版本(在 test repo 的分支上),但结果是一样的。

我希望获得有关 DynamoDB 的更新(已解决的承诺)。虽然我只得到未决的承诺,但现在解决或拒绝。

4

0 回答 0