我想从部署在 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 的更新(已解决的承诺)。虽然我只得到未决的承诺,但现在解决或拒绝。