Javascript 异步数据库查询



我对AWS数据库,Node.JS和Express完全陌生。我需要对 AWS dynamodb 数据库进行多次查询(对所有device_id计数求和并遍历所有箱(。我在下面有我的代码。查询参数逻辑不完整,但我什至无法弄清楚从哪里开始编译异步逻辑并将查询返回到我的 API 中输出。

我尝试了嵌套循环,但很快意识到逻辑是错误的,因为所有数据库调用都是异步的。我尝试使用 async.map((,但不知道如何完成它。我应该重复我对 deviceId 的 async.map(( 所做的工作,但将其嵌套在垃圾箱中吗?那么如何将内部 async.map(( 值返回到外部值呢?还是有没有一种我什至没有想到的更优雅的方式来做到这一点?

如果有人对此有任何其他资源和/或基本框架的描述,我将不胜感激。

谢谢!

var getCoffeeHistogram = function() {
var counts = [];
var bins = fillRange(16);
var deviceIDs = fillRange(18);
var i;
for (i = 0; i < 16; i++) {
async.map(
deviceIDs,
function(deviceID, callback) {
var param = {
TableName: "iot-coffeecounts",
ExpressionAttributeValues: {
':id': "" + deviceID,
':time': "1"
},
ExpressionAttributeNames: {
"#ts": "timestamp"
},
KeyConditionExpression: "device_id = :id and #ts > :time"
};
docClient.query(param, function(err, data) {
if (err) {
console.log("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Querying Succeeded for device");
}
callback(null, data.Count);
});
},
function(err, coffeeCounts) {
console.log(function(coffeeCounts) {
var total = 0;
for (count in coffeeCounts) {
total = total + count;
}
return total;
});
}
);
}
};

与其循环通过设备 ID 并发出多个查询(效率非常低(,不如在 dynamodb 中使用 batchGet 方法在单个查询中返回所有设备 ID 的结果。

您只需要根据文档构造包含所有设备 ID 的查询对象并发出查询即可。

最新更新