发送响应请求后,立即从节点更新Amazon DDB表

时间:2019-05-22 10:09:10

标签: node.js amazon-dynamodb zeit-now

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

该应用是松弛机器人。我收到了来自slack 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
  }
};

根据Rob Evans在Zeit Spectrum聊天中的建议,我准备了版本 使用async-await(在测试存储库中的分支上),但结果相同。

我希望在DynamoDB上获得更新(已解决的承诺)。 虽然我只能得到未完成的承诺,但现在可以解决或拒绝。

0 个答案:

没有答案