在lambda工作之前,必须对其进行多次测试



我有一个lambda函数,正在使用它。它将非常基本的信息插入DynamoDB表中。这是代码:

'use strict';
const alexaSkillKit = require('alexa-skill-kit');
const AWS = require('aws-sdk');
function binDaySkill(event, context, callback) {
alexaSkillKit(event, context, (message) => {
let params = {
Item:      {
user_id:       '123',
some_data: 'some data here'
},
TableName: 'my_table'
};
let documentClient = new AWS.DynamoDB.DocumentClient();
documentClient.put(params, function (err, data) {
if (err) {
callback("Error", err);
} else {
callback(null, data);
}
});
});
}

我遇到的问题是,它只是有时将数据保存在数据库中。在它做任何事情之前,我必须点击测试5-10次。

有人能帮上忙吗?

发生这种情况的原因是alexa-skill-kit为您处理回调。

请参阅文档。通过传入context对象,您允许包装处理程序(alexaSkillKit(...)(管理返回对象和有效负载的解码和编码。处理程序alexSkillKit回调函数只是希望返回一个值。

对于您的代码示例,您可以执行以下操作:

'use strict';
const alexaSkillKit = require('alexa-skill-kit');
const AWS = require('aws-sdk');
function binDaySkill(event, context, callback) {
alexaSkillKit(event, context, (message) => {
let params = {
Item: {
user_id: '123',
some_data: 'some data here'
},
TableName: 'my_table'
};
let documentClient = new AWS.DynamoDB.DocumentClient();
return documentClient.put(params).promise()
.then((data) => {
// stuff with the data!
return data;
}).catch((err) => {
// stuff with the error
throw err;
});  
});
}

n.b.它在几次调用后工作的原因是lambda重新使用每次调用执行的环境。它通过有效地"冻结"环境状态并在再次需要时解冻环境来实现这一点。这是人们进行许多优化的基础;这意味着,当alexaSkillKit首先返回时,你有时会解冻一个正在呼叫中途的环境

最新更新