【发布时间】:2017-09-05 04:08:50
【问题描述】:
我已经被这个代码卡住了大约一天了。
我只是想通过使用 Alexa 的启动请求将信息添加到 DynamoDB。
我收到以下错误代码:
"errorMessage": "RequestId: f96ae2cb-1dbf-11e7-a267-b7cf2f2c95a0 进程在完成请求前退出"
信息实际上已插入到 DynamoDB 中,但由于错误,我无法向程序添加更多功能。
据我了解,可能是回调有问题。
我尝试了许多不同的方法来“回调”或返回某些内容,但我还没有弄清楚如何避免错误。
如果我取消注释 this.emit(':tell', "Hello, inserting Apples into DynamoDB");,错误就会消失,但不会插入任何信息。
我做错了什么,我该如何解决?
下面是我的代码;
'use strict';
var Alexa = require('alexa-sdk');
const doc = require('dynamodb-doc');
const dynamo = new doc.DynamoDB();
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.registerHandlers(handlers);
alexa.execute();
};
var handlers = {
'LaunchRequest': function(event, context, callback) {
// this.emit(':tell', "Hello, inserting Apples into DynamoDB");
var params = {
Item: {
date: Date.now(),
message: "Apples"
},
TableName: '_yourTableName'
};
dynamo.putItem(params, function(err, data) {
if (err) {
callback(err, null);
} else {
callback(null, data);
}
});
context.done();
}
};
【问题讨论】:
-
您的 Lambda 函数可能在 PutItem 请求完成之前退出。你需要让你的函数一直运行直到你的任务完成,然后调用
context.done()。见:Everything Depends on Context or, The Fine Art of nodejs Coding in AWS Lambda -
感谢您的回复。我检查了链接并添加了 context.done()。当我将语句放在 dynamo.putItem 函数之外时,我现在收到错误“errorMessage”:“无法读取未定义的属性‘完成’”。如果我将 context.done() 直接放在 else 语句之后,我会得到同样的错误。
-
抱歉,我不知道
context的更多细节——只是很多人(包括我自己)都遇到过这个问题,所以我想提一下。 -
别担心,感谢您的建议!
-
你找到解决办法了吗?
标签: amazon-web-services aws-lambda amazon-dynamodb alexa alexa-skills-kit