を呼び出して操作を適用するアイテムごとに、配列を反復処理する必要があります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で処理を同期するのはあまり良くないことを私は知っています。配列を構築するのではなく、名前を 1 つずつクライアントに伝えたほうがよいと思いますか?