async.each
を使用して、fs.stat
を使用して180個のファイル名の配列をチェックし、物理ファイルが存在することを確認しています。現在のところ、すべてのファイルは存在していますが、このコードを呼び出すたびに、fs.stat
によって180イメージのうち3イメージが存在しないことがわかります。見つからなかった画像は、呼び出しごとにわずかに異なります。fs.statが既存のファイルを特定できません
最初に見つからないイメージは、常に配列の70番目のファイル名の周りにあります。配列のサイズを(たとえば)50個の名前のリストに減らすと、すべてのイメージが見つかります。
今async.forEachOfで、代わりにfs.statのfs.open使用して、基本的には同じ結果になっ// ImagesToCheck is an array of 180 filepaths, all of which exist on the server
var index = 0
async.each(ImagesToCheck,
function(item, cb) {
fs.stat(item, function(error, value) {
if (error) {
// Logs "ENOENT: no such file or directory"
console.log("error is "+error)
// this is logging the correct filename, which DOES exist
console.log("filename is "+ImagesToCheck[index])
Speakers[index].speaker_image_url = null
index++
cb()
}
else {
// Image exists
// console.log("image exists " + index)
Speakers[index].speaker_image_url = "http://www.apiurl.co.uk/images/seminar_image-" + rows[index].seminar_id + ".jpg"
index++
cb()
}
}) // close fs.stat
},
function(err) {
// sends the array of URLs
callBack(Speakers)
})
//:
var index = 0
async.forEachOf(ImagesToCheck,
function(item, key, cb) {
fs.open(item, 'r', function(error, value) {
if (error) {
// Logs "ENOENT: no such file or directory"
console.log("error is " + error)
// this is logging the correct filename, which DOES exist
console.log("index is " + index + ", filename is " + ImagesToCheck[index])
Speakers[index].speaker_image_url = null
index++
return cb()
}
// if no error
Speakers[index].speaker_image_url = "http://www.apiurl.co.uk/images/seminar_image-" + rows[index].seminar_id + ".jpg"
index++
cb()
})
},
function(err) {
// send the array of urls
callBack(Speakers)
}
)
このインデックスは、印刷前に更新される可能性があるため、今のところ有用な情報を提供しません。 'async.eachOf'を使って実インデックスを取得します – DrakaSAN
forEachOfに変更しましたが、それと同じように動作します! ... –
200個のファイルをチェックするときにテスト実装を行いました。エラーはありません – DrakaSAN