我正在设置一个API,以使用带有Node.js 8.10的Async函数在DynamoDB上扫描表。当我调用扫描方法时,我使用AWS开发工具包2.3 Promise来确保执行查询。但是,我想返回一个自定义JSON,其中包含状态代码的信息,以及从数据库接收到的数据在主体上的信息。
我为诺言使用了单独的异步函数。该函数接收来自exports.handler
函数的用户输入。我使用查询信息创建params数组,最后调用scan函数对表执行查询,作为一个承诺。最后,在promise中,我用要返回的信息创建了一个新变量,但是即使我返回了var,它也将始终返回promise。
const paramQuery = async () => {
return await paramQuery();
}
const paramQuery = async () => {
let params = {
TableName: process.env.TABLE_NAME;
};
var queryParams = documentClient.scan(params).promise();
queryParams.then(function(data) {
let response = {
"statusCode": 200,
"body": (data.Items)
}
return response;
}).catch(function(err){
console.log(err);
});
return queryParams;
}
// Expected result:
Response:
{
"statusCode": 200,
"body": [{
"ParameterName": "Name",
"ParameterValue": "Value"
}, {
"ParameterName": "Name",
"ParameterValue": "Value"
}]
}
// Current result:
Response:
{
"Items": [
{
"ParameterName": "Name",
"ParameterValue": "Value"
},
{
"ParameterName": "Name",
"ParameterValue": "Value"
}
],
"Count": 2,
"ScannedCount": 2
}
我已经尝试寻找类似的问题,但是没有找到与我的问题完全相关的问题。理想情况下,应避免显式调用resolve
或reject
。
答案 0 :(得分:0)
尝试一下。
const paramQuery = async () => {
return await paramQuery();
}
const paramQuery = async () => {
let params = {
TableName: process.env.TABLE_NAME;
};
return new Promise((resolve, reject) => {
var queryParams = documentClient.scan(params).promise();
queryParams.then(function(data) {
resolve({
"statusCode": 200,
"body": (data.Items)
});
}).catch(function(err){
reject(err)
});
});
}