fs.readFileが非同期であるとして、あなたはコールバックまたは、例えば約束を使用する必要があります。
コールバック:
function metaInfo (id, cb){
var dir = 'files/'+id;
var count = 0
fs.readFile(__dirname +'/' + dir+'/myfile.json', 'utf8', function (err, data) {
if (err) cb(err);
obj = JSON.parse(data);
var myArr = obj.nodes;
var count = Object.keys(myArr).length;
console.log("counting :", count)
cb(null, count)
});
};
そして、あなたはこのようにそれを使用する:あなたはこのようにそれを使用します
function metaInfo (id){
return new Promise(function(resolve, reject) {
var dir = 'files/'+id;
var count = 0
fs.readFile(__dirname +'/' + dir+'/myfile.json', 'utf8', function (err, data) {
if (err) reject(err);
obj = JSON.parse(data);
var myArr = obj.nodes;
var count = Object.keys(myArr).length;
console.log("counting :", count);
resolve(count);
});
});
};
:
metaInfo(1)
.then(function(count) { console.log('Count:', count);
.catch(function(error) { throw error; };
約束
metaInfo(1, function(err, result) {
if(err) throw err;
console.log('Count:', result);
});
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promiseを参照)
また場合myArrリターンを何
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)(https://nodejs.org/api/fs.html#fs_fs_readfilesync_file_options)
またはasync /のawait FSモジュールのreadFileSyncメソッドを使用しますが、互換性に注意することができあなたはそれをログアウトしますか? – jsw324
あなたは同期readFile関数(Google)を使用する必要があります。そうでなければ、そのコールバック関数内のコードは別々に発生します。 –