0

ここでの問題は、最後のファイルのみが変更されていることです。ただし、すべてのファイルが成功メッセージを返します。どうしたの?ありがとう。

var fs = require('fs'),
    fileArr = [
                'base/general.css',
                'components/bootstrap_icons.css',
                'components/fullpage_slider.css'
            ];

for(var key in fileArr) {
    fs.readFile(fileArr[key],'utf8', function(err,data) {
        if(err){
            return console.log(err);
        } else {
            console.log('success');
        }

        var result = data.replace(/([^\/][.*]|[(.]).*?(\bimages\b)/g,'(images');

        fs.writeFile(fileArr[key], result, 'utf8', function(err) {
            if(err) {
                return console.log(err);
            } else {
                console.log('success');
            }
        });
    });
}
4

2 に答える 2

1

スコーピングの問題があります。

ファイルを書き込んでいる頃には、keyすでに最後のポイントになっています。

代わりにこれを試してください:

for (var key in fileArr) {
    (function (file) {
        //new scope for this file
        fs.readFile(file, 'utf8', function (err, data) {
            if (err) {
                return console.log(err);
            } else {
                console.log('success');
            }

            var result = data.replace(/([^\/][.*]|[(.]).*?(\bimages\b)/g, '(images');

            fs.writeFile(file, result, 'utf8', function (err) {
                if (err) {
                    return console.log(err);
                } else {
                    console.log('success');
                }
            });
        });
    })(fileArr[key]);
}
于 2013-11-15T03:31:50.553 に答える
0

または、単純に Array.prototype.forEach() ( MDN Docs ) を使用して、クロージャや IIFE (Immediately Invoked Function Expression) に頼る必要はありません:

fileArr.forEach(function(file) {
    // do stuff
});
于 2014-01-14T23:59:53.993 に答える