3 回答

TA貢獻1843條經驗 獲得超7個贊
給你幾種寫法:
callback形式:
//func.js
const readFile = require('util').promisify(require('fs').readFile);
function read2JSON(filename, callback){
let result;
readFile(filename).then((data)=>{
callback(null, JSON.parse(data.toString()));
}).catch((err)=>{
console.log("******ERROR******:" + err);
callback(err, null);
});
}
exports.read2JSON = read2JSON;
//測試一下
require('./func').read2JSON('db/list.json', (err, parseResult) {
console.log(parseResult);
});
Promise寫法:
//func.js
const readFile = require('util').promisify(require('fs').readFile);
function read2JSON(filename, callback){
return readFile(filename).then((data)=>{
return JSON.parse(data.toString());
})
}
exports.read2JSON = read2JSON;
require('./func').read2JSON('db/list.json').then(function(result){
console.log(result);
});
async/await 寫法:
//func.js
const readFile = require('util').promisify(require('fs').readFile);
exports.read2JSON = async (filename, callback) => {
let data = await readFile(filename);
let result = JSON.parse(data.toString());
return result;
}
require('./func').read2JSON('db/list.json').then(result => {
console.log(result);
});

TA貢獻1895條經驗 獲得超7個贊
簡單講js是單線程,一定會一部分代碼阻塞另一部分代碼的運行,但是像網絡請求或者讀寫文件,動作的開始和結束是在js,中間耗時的過程是在其他線程,異步就是讓中間這部分不去阻塞其他js代碼
添加回答
舉報