【发布时间】:2019-10-27 22:25:40
【问题描述】:
我在 Lambda 中有一个 NodeJS 函数,它调用一个库以便在 Dynamo DB 中运行地理空间查询。
最终,我希望这个查询的结果由 Lambda 返回,因为这个 Lambda 函数最终会被另一个函数调用,因此必须返回结果。
我无法在 Lambda 函数中返回承诺的结果。
我已经尝试多次重写代码,理解承诺,使用异步等待......我已经阅读了许多文章,包括https://dashbird.io/blog/aws-lambda-supports-node-version-8.10/ https://techsparx.com/software-development/aws/aws-sdk-promises.html https://medium.com/tensult/async-await-on-aws-lambda-function-for-nodejs-2783febbccd9 Getting API call in node8.10 in Lambda results in Promise <pending> and undefined
无济于事。
const AWS = require('aws-sdk');
const ddb = new AWS.DynamoDB();
const ddbGeo = require('dynamodb-geo');
const config = new ddbGeo.GeoDataManagerConfiguration(ddb, 'MyGeoTable');
const myGeoTableManager = new ddbGeo.GeoDataManager(config);
exports.handler = async function (event, context) {
let data = await myGeoTableManager.queryRadius({
RadiusInMeter: 1000,
CenterPoint: {latitude: 51.50, longitude: -0.17}
});
console.log(data);
return data;
}
代码运行,但 Lambda 返回 [] 作为结果。
【问题讨论】:
-
会不会是因为
data真的是一个空集,即 DDB 中没有与您的查询匹配的数据? -
不,如果我在 promise 上运行 .then() 并 console.log 它,我会得到预期的响应。
标签: javascript node.js amazon-web-services asynchronous aws-lambda