導(dǎo)讀:
- 假定讀者已了解同步與異步的區(qū)別,當(dāng)你使用Node.js異步操作時(shí),難免會(huì)出現(xiàn)拿到的值為undefined官边,這個(gè)時(shí)候常用的解決方法就是回調(diào)函數(shù) / 事件驅(qū)動(dòng)來(lái)使其達(dá)到同步的目的。
例子:
const fs = require('fs')
function getMime() {
fs.readFile('mime.json',function(err,data) {
// console.log(data.toString());
return data.toString();
})
}
console.log(getMime()); // undefined 原因:當(dāng)執(zhí)行到readFile()時(shí),由于是異步讀取文件督勺,故該函數(shù)執(zhí)行完成,首先返回了undefined
const fs = require('fs')
function getMime(callback) {
fs.readFile('mime.json',function(err,data) {
// console.log(data.toString());
// return data;
callback(data)
})
}
getMime((result) => {
console.log(result.toString()); // 獲取到值
})
const events = require('events')
const fs = require('fs')
let EventEmitter = new events.EventEmitter()
// 廣播和 接收廣播
// 監(jiān)聽(tīng) to_parent的廣播
/*EventEmitter.on('to_parent', (data) => {
// 監(jiān)聽(tīng)到廣播后才執(zhí)行回調(diào)
console.log(`接收到了這個(gè)廣播事件的數(shù)據(jù):${data}`) // 2.接收到了這個(gè)廣播事件的數(shù)據(jù):send
})
setTimeout(() => {
console.log('開(kāi)始廣播...') // 1.開(kāi)始廣播
// 廣播to_parent事件
EventEmitter.emit('to_parent', 'send')
},100)*/
function getMime(callback) {
fs.readFile('mime.json',function(err,data) {
EventEmitter.emit('data', data) // 異步處理到這里就廣播data事件
})
}
getMime()
EventEmitter.on('data', (data) => {
console.log(data.toString())
}) // 接收廣播拿到傳來(lái)的數(shù)據(jù)
總結(jié):
- 很經(jīng)典的問(wèn)題斤贰,經(jīng)常會(huì)遇到智哀,注意掌握。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者