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 (立即调用函数表达式):

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