【发布时间】:2017-12-17 13:28:27
【问题描述】:
我对 AWS 数据库、Node.JS 和 Express 完全陌生。我需要对 AWS dynamodb 数据库进行多次查询(将所有 device_id 计数相加并遍历所有 bin)。我在下面有我的代码。查询参数逻辑不完整,但我什至不知道从哪里开始异步逻辑编译并将查询返回到我的 API 中的输出。
我尝试了嵌套循环,但很快意识到逻辑错误,因为所有数据库调用都是异步的。我尝试使用 async.map() 但不知道如何完成它。我是否应该重复我对 deviceIds 的 async.map() 所做的操作,但将其嵌套在 bin 中?那么如何将内部 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;
});
}
);
}
};
【问题讨论】:
-
Promises 和 ES6
await/async是当今驯服异步代码的最简单方法。
标签: javascript node.js amazon-web-services express asynchronous