Mah*_*sha 4 node.js aws-lambda
我想使用新的nodejs 8.10来开发我的lambdas.在节点6.10样式中编写时,一段简单的代码可以工作,但是当我使用节点8.10时,相同(相似)的代码不起作用.
下面是成功将数据插入dynamodb表的工作代码(nodejs 6.10)
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});
var documentClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.handler = (event, context, callback) => {
// TODO implement
var params = {
Item: {
client: 'client_'+Math.random(),
Type: 1,
Status: true,
json: { foo: 'bar', address:{ city:'Pune', street: 'ABC Nagar', pin:'411099'} }
},
TableName: 'clients'
};
documentClient.put(params, function(err, data) {
if (err) {
console.log("Error", err);
callback(err, null);
} else {
console.log("Success", data);
// return "Hi, insert data completed";
callback(null, data);
}
});
};
Run Code Online (Sandbox Code Playgroud)
并且在一个节点8.10样式之下不起作用(意味着不将数据插入到dynamodb表中).我一直得到null作为返回值.
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});
var documentClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.handler = async (event) => {
// TODO implement
var params = {
Item: {
client: 'client_'+Math.random(),
Type: 1,
Status: true,
json: { foo: 'bar', address:{ city:'Pune', street: 'ABC Nagar', pin:'411099'} }
},
TableName: 'clients'
};
documentClient.put(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
return "Hi, insert data completed";
}
});
};
Run Code Online (Sandbox Code Playgroud)
我花了2-3个小时搜索..找不到任何文章或任何类似的问题.谁能告诉我我做错了什么?
Ash*_*ash 10
异步/等待是承诺的语法糖,你documentClient.put应该充满希望.由于documentClient.put基于回调appoach,因此您必须使用promise包装它
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'us-east-1'});
var documentClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.handler = async (event) => {
// TODO implement
var params = {
Item: {
client: 'client_'+Math.random(),
Type: 1,
Status: true,
json: { foo: 'bar', address:{ city:'Pune', street: 'ABC Nagar', pin:'411099'} }
},
TableName: 'clients'
};
let putItem = new Promise((res, rej) => {
documentClient.put(params, function(err, data) {
if (err) {
console.log("Error", err);
rej(err);
} else {
console.log("Success", data);
res("Hi, insert data completed");
}
});
});
const result = await putItem;
console.log(result);
return result
};
Run Code Online (Sandbox Code Playgroud)
注意:建议在单独的文件中使用DB操作,而不是在处理函数本身中使用
您是否在表格中查看是否正在插入数据?我认为是这样。
异步样式代码的问题在于您没有返回值。返回"Hi, insert data completed"从put回调不返回从价值handler。
您可以手动创建一个承诺并从中返回handler,但是我会尝试使用promisify。
该代码未经测试,但应接近:
...
const util = require('util');
...
documentClient.putPromise = util.promisify(documentClient.put);
...
try {
const data = await documentClient.putPromise(params);
console.log("Success", data);
return "Hi, insert data completed";
}
catch (err) {
console.log("Error", err);
}
Run Code Online (Sandbox Code Playgroud)
以下是有关Promisify的更多信息:http ://2ality.com/2017/05/util-promisify.html
| 归档时间: |
|
| 查看次数: |
3274 次 |
| 最近记录: |