我很難讓一些異步操作的流程正確流動。由於我現在的代碼如下,outside readFile
先打印到控制檯,然後打印names
和years
,然後最後打印in readFile
,當我希望整個readFile
/forEach
處理髮生在之前。如何使用節點fs構造異步流程
const fs = require('fs')
const names = {}
const years = {}
fs.readdir('./namesData', (err, files) => {
files.forEach(file => {
var year = file.substr(3, 4)
var yearObj = {}
fs.readFile(`./namesData/${file}`, 'utf8', (err, data) => {
console.log('in readFile')
if (err) throw new Error(err)
var arr = data.split('\n')
arr.forEach(record => {
var recordArray = record.trim().split(',')
var name = recordArray[0]
var gender = recordArray[1]
var score = recordArray[2]
// populate 'names' object
var nameObj = {year: year, gender: gender, score: score}
if (names.hasOwnProperty(name)) {
names[name].push(nameObj)
} else {
names[name] = [nameObj]
}
// populate 'years' object & add to yearObj and then years object
var yearNameObj = {gender: gender, score: score}
if (yearObj.hasOwnProperty(name)) {
yearObj[name].push(yearNameObj)
} else {
yearObj[name] = [yearNameObj]
}
})
})
console.log('outside readFile')
years[year] = yearObj
})
console.log(names)
console.log(years)
})
你能後的樣本數據是如何'years'和'會像names'? – Sridhar