我正在从用node.js env编写的lambda函数查询dynamodb-
尝试查询“货币价格”表,其中“货币”列的值为“ BLC”。 当我在lambda控制台中测试我的功能时--打印直到第二个控制台日志-“查询数据库ConsolePrice”并返回NULL响应。它不会打印接下来的两个控制台日志中的任何一个,并且不确定是否甚至正在连接到数据库。
似乎代码根本没有进入ddb.query()
函数中-试图将所有记录器都置于该函数中,但没有输出。
我尝试检查所有可能的aws文档,但无法理解为什么未执行此功能。
我的代码如下所示-
var AWS = require ('aws-sdk');
exports.handler = async (event) =>
{
AWS.config.update({region: 'ap-southeast-2'});
console.log("i am in function");
// Create DynamoDB service object
var ddb = new AWS.DynamoDB.DocumentClient();
var table = 'CurrencyPrice';
var params = {
"Select": "ALL_ATTRIBUTES","TableName": "CurrencyPrice",
};
console.log("querying DB" + table);
ddb.query(params, function(err, data) {
console.log("i am in ddb query");
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null,2));
} else {
console.log(data);
}
});
};
我在lambda控制台中得到的当前结果:
Response:
null
Request ID:"XXXX"
Function Logs:
START RequestId: XXX Version: $LATEST
2019-06-02T13:31:55.189Z XXXX INFO i am in function
2019-06-02T13:31:55.331Z XXXX INFO querying DBCurrencyPrice
2019-06-02T13:31:55.390Z XXXX INFO { Select: 'ALL_ATTRIBUTES', TableName: 'CurrencyPrice' }
END RequestId: XXXX
我希望至少它会打印“无法查询”或连接到数据库并进行查询的实际数据?
答案 0 :(得分:1)
AWS示例
ddbClient.query(params, callback)
显示同步问题。执行将继续不,等待回调完成。这就是为什么您得到Null
。
您将必须将此.query()
调用包装到Promise
中,因此执行将等待此回调完成。
答案 1 :(得分:0)
如果您使用的是async/await
,则希望返回一个承诺。
var AWS = require("aws-sdk");
AWS.config.update({ region: "ap-southeast-2" });
var ddb = new AWS.DynamoDB.DocumentClient();
exports.handler = async event => {
console.log("i am in function");
// Create DynamoDB service object
var table = "CurrencyPrice";
var params = {
Select: "ALL_ATTRIBUTES",
TableName: "CurrencyPrice"
};
console.log("querying DB" + table);
return ddb
.query(params)
.promise()
.then((err, data) => {
console.log("i am in ddb query");
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log(data);
}
});
};
答案 2 :(得分:0)
查询一个诺言并等待其履行状态。
const promise = await ddb.query(params, function(err, data) {
console.log("i am in ddb query");
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null,2));
} else {
console.log(data);
// process your data
}
}).promise();
return promise;