私は単一の<input>
タグで複数の画像をアップロードできるフィールドを持つフォームを持っています。 Nodeを使ってファイルシステムにアクセスすると、非同期にファイルを読み書きするためのコールバックがキューに入れられているようです。私は複数のファイルを持っているので、私はfor
ループ内にこれらの呼び出しを持っているので、i
の値は、コールバックがヒットした時点で常にarray.length
の値になり、オブジェクトが未定義になります。ノードで複数のファイルをアップロードすると、同期コールバックが強制的に実行されますか?
for (var i = 0; i < req.files.photos.length; i++) {
req.fs.readFile(req.files.photos[i].path, function(err, data) {
if(err) throw err;
// i = req.files.photos.length here
// Test is undefined when the breakpoint on this line is hit for the first time
var test = req.files.photos[i];
// Both print "undefined"
console.log(test.name);
console.log(test.originalFileName);
var newPath = __dirname + "/../public/uploads/" + req.files.photos[i].name;
req.fs.writeFile(newPath, data, function (err) {
if (err) throw err;
console.log("it worked");
});
});
}
ありがとう、これで問題は解決しました。私はこれらの前に私はajaxで非同期の問題を抱えていたとき、私はこれを次の時間に念頭に置いておくべきだと思います:) – James