在node.js中读取和写入文件异步

时间:2014-09-01 09:23:46

标签: javascript node.js asynchronous

目前我正在异步读写文件,问题是我不确定在执行其余代码之前是否已读取文件中的所有行,这是我的代码:< / p>

var fs = require('fs');

//var str = fs.readFileSync("stockststs.json");



function updateJson(ticker) {
    //var stocksJson = JSON.parse(fs.readFileSync("stocktest.json"));
    fs.readFile('stocktest.json', function(error, file) {
        stocksJson =  JSON.parse(file);



        if (stocksJson[ticker]!=null) {
            console.log(ticker+" price : " + stocksJson[ticker].price);
            console.log("changin the value...")
            stocksJson[ticker].price =  989898;
            console.log("Price after the change has been made -- " + stocksJson[ticker].price);
             fs.writeFile('stocktest.json',JSON.stringify(stocksJson, null, 4) , function(err) {  
                            if(!err) {
                                console.log("File successfully written");
                            }


                       });
        }
        else {
            console.log(ticker + " doesn't exist on the json");
        }
    });
}


updateJson("APPL");

我想知道是否有更好的方法可以实施?

1 个答案:

答案 0 :(得分:1)

检查回调中的错误始终是一个好习惯。例如,我编写了一个小的getCache函数,用于检查文件是否先存在,然后尝试读取该文件并在之后触发回调

Cache.prototype.getCache = function(cache_filename, callback) {
    cache_filename = this.cache_foldername + cache_filename;
    fs.exists(cache_filename, function(exists) {
        if (exists) {
            fs.readFile(cache_filename, 'utf8', function (error, data) {
                if (!error) {
                    console.log('File: '+ cache_filename +' successfully Read from Cache!');
                    _.isObject(data) ? callback(null,data) : callback(null,JSON.parse(data));
                } else console.log("Error Reading Cache from file: " + cache_filename + " with Error: " + error);
            });
        } else callback(null,false);
    });
}

请注意,此处您需要做的是在使用if (!error)

读取并检查文件后编写该文件

我希望这有帮助