Javascript AWS Lambda不等待DynamoDB的承诺
我对NodeJS上的promissions相当陌生,我正试图在awslambda中编写一些后端代码来查询包含设备的DynamoDB表 代码如下:Javascript AWS Lambda不等待DynamoDB的承诺,javascript,node.js,amazon-web-services,promise,aws-lambda,Javascript,Node.js,Amazon Web Services,Promise,Aws Lambda,我对NodeJS上的promissions相当陌生,我正试图在awslambda中编写一些后端代码来查询包含设备的DynamoDB表 代码如下: var geohash = require('ngeohash'); var AWS = require('aws-sdk'); var documentClient = new AWS.DynamoDB.DocumentClient(); exports
var geohash = require('ngeohash');
var AWS = require('aws-sdk');
var documentClient = new AWS.DynamoDB.DocumentClient();
exports.handler = (event, context, callback) => {
if(event.params.querystring.minLat && event.params.querystring.minLon
&& event.params.querystring.maxLat && event.params.querystring.maxLon ){
var bboxes = geohash.bboxes(event.params.querystring.minLat, event.params.querystring.minLon, event.params.querystring.maxLat, event.params.querystring.maxLon, 6);
var params = {
"TableName": "Devices",
"IndexName": "GeoIndex",
"KeyConditionExpression": "GeohashPrefix = :bbox",
"ExpressionAttributeValues": {
":bbox": ""
},
};
var devices = [];
var promises = [];
for (var num in bboxes) {
params.ExpressionAttributeValues[":bbox"] = bboxes[num];
promises = promises.concat(documentClient.query(params, function(err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Query succeeded.");
devices = devices.concat(data.Items);
console.log(devices);
}
}).promise())
}
Promise.all(promises).then(callback(null, devices));
}
}
这里发生的事情就是承诺。所有人实际上并不是等待所有的承诺,而是立即返回
我做错了什么?您需要传递一个函数,而不是函数的结果 这:
Promise.all(promises).then(callback(null, devices));
应该是这样的:
Promise.all(promises).then(() => callback(null, devices));
在第一种情况下,在定义承诺时立即调用回调。您需要将函数传递给承诺,而不是传递函数的结果 这:
Promise.all(promises).then(callback(null, devices));
应该是这样的:
Promise.all(promises).then(() => callback(null, devices));
在第一种情况下,在定义承诺时立即调用回调