我需要对数组进行迭代,对于每个项目,我通过调用HTTP call
.
困难在于我需要syncronize
这个过程才能在循环之后调用回调(包含由 执行的所有操作之后的数组HTTP call
)。
让我们考虑这个简短的例子:
function customName(name, callback) {
var option = {
host:'changename.com',
path: '/'+name,
headers: { 'Content-Type': 'application/json' },
port: 80,
method:'POST'
};
var req = http.request(option, function(res) {
var output = "";
res.on('data', function (chunk) {
output += chunk;
});
res.on('end', function() {
var obj = JSON.parse(output);
callback(obj.res);
});
});
req.on('error', function(e) {
console.error(e.message);
});
req.end();
}
function changeNames(OldNames, callback) {
var Res = [];
for (name in OldNames) {
customName(OldNames[name], function(new_name) { Res.push(new_name); });
});
callback(Res);
}
var Names = ['toto', 'tata', 'titi'];
changeNames(Names, function(Names) {
//...
});
这里循环在第一个之前结束HTTP call
,所以Res array
是空的。
我们如何同步这个执行?
我知道在 nodejs 中同步处理并不是很好。您认为与客户一一沟通名称而不是构建数组会更好吗?