2014-09-01 2 views
0

В настоящее время я читаю и записываю файлы асинхронно, дело в том, что я не уверен, что вся строка из файла была прочитана до того, как остальная часть моего кода будет выполнена, здесь мой код:Чтение и запись файлов async в node.js

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

его всегда хорошая практика, чтобы проверить ваш обратный вызов на предмет ошибки. Например, я написал небольшую функцию 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)

я надеюсь, что это помогает

+0

Давайте предположим, что я хочу, чтобы запустить мою функцию несколько раз, это означает, что он будет читать файл, писать в него, то это будет происходить снова, поэтому я пробовал это и во 2-м звоните, не записывая в файл. любая идея почему? – user3502786

+0

Да, потому что эта функция проверяет, существует ли файл в первую очередь. Если вы хотите сохранить переписывание, просто удалите эту проверку – AhmadAssaf

+0

, вы говорите о моей функции? Если да, какую строку я должен удалить? – user3502786

Смежные вопросы