在两个嵌套循环中同步调用
Synchronous calls in two nested loops
我如何在Node.JS中两个嵌套的'for'循环中进行同步调用:我不知道如何拥有同步版本的代码,当create_db完成时,它将进入下一次迭代!
var new_items = [];
for (var key in config.models) {
var selected_field = config.models[key];
for (var item in config.models[key].fields) {
var selected_item = config.models[key].fields[item];
new_items.push({AttributeName: selected_item.name, AttributeType: selected_item.type});
}
CreateDB(selected_field.name, new_items);
var selected_item = config.models[key].fields[item];
}
编辑:在create_db我使用回调函数!
function CreateDB(name, new_items) {
ddb.createTable(name, {hash: ['id', ddb.schemaTypes().number],
range: ['time', ddb.schemaTypes().string],
AttributeDefinitions: new_items
},
{read: 1, write: 1}, function(err, details) {
console.log("The DB is now created!");
});
}
谢谢
你需要修改你的CreateDB
函数,让它接受一个回调,然后在.createTable
的回调中调用这个回调:
function CreateDB(name, new_items, callback) {
ddb.createTable(name, {hash: ['id', ddb.schemaTypes().number],
range: ['time', ddb.schemaTypes().string],
AttributeDefinitions: new_items
},
{read: 1, write: 1}, function(err, details) {
console.log("The DB is now created!");
callback(err, details);
});
}
那么你可以使用类似async模块的each方法。比如:
var async = require('async');
async.each(Object.keys(config.models), function(key, callback) {
var new_items = [];
var selected_field = config.models[key];
for (var item in config.models[key].fields) {
var selected_item = config.models[key].fields[item];
new_items.push({AttributeName: selected_item.name, AttributeType: selected_item.type});
}
CreateDB(selected_field.name, new_items, callback);
}, function(err) {
// All done with CreateDB calls
});
我建议使用async
模块。它具有实用函数,使我认为您想要做的事情非常容易。
async.each(Object.keys(config.models), function(key, done) {
var selected_field = config.models[key];
// I used the 'map' function to make it a bit easier to read
var new_items = selected_field.fields.map(function(item) {
return {
AttributeName: item.name
AttributeType: item.type
};
});
CreateDB(selected_field, new_items, done);
}, function(err) {
// this gets called when all db calls are finished
console.log("The DB is now created!");
});
function CreateDB(name, new_items, callback) {
ddb.createTable(name, {
hash: ['id', ddb.schemaTypes().number],
range: ['time', ddb.schemaTypes().string],
AttributeDefinitions: new_items
}, {
read: 1,
write: 1
}, callback);
}
您可以尝试类似期货的东西,尤其是它们的序列代码,这里:
希望这对你有帮助!
编辑:我相信你也可以在es6-promise中使用更内置的方法。但是,我不知道……:)
相关文章:
- Knockout.js中带有if:子句的嵌套循环
- 有没有一种方法可以在所有嵌套循环之后放置一个标签,以便在一步中将它们全部打断
- JavaScript:在嵌套循环中为数组赋值
- Javascript嵌套循环匹配、组合、替换
- 在嵌套循环中处理 AJAX (Angularjs)
- knockout.js中的嵌套循环
- 在二维数组中搜索比嵌套循环更有效的方法
- 用于动态创建对象的嵌套循环
- 在javascript中嵌套循环
- JavaScript中的嵌入循环和嵌套循环之间有区别吗
- 嵌套循环中数组2d中的javascript变量丢失
- 嵌套循环javascript棋盘
- jQuery嵌套循环nextUntil选择器
- 如何使用嵌套循环使用 Javascript 打印到外部循环的输出中
- 如何在 Javascript 中创建一个模拟 100 行和 10 列网格的嵌套循环
- 如何避免嵌套循环
- 嵌套循环以添加数字
- 嵌套循环问题
- 嵌套循环中 Javascript 变量的作用域
- 在两个嵌套循环中同步调用