导读:
- 假定读者已了解同步与异步的区别,当你使用Node.js异步操作时,难免会出现拿到的值为undefined,这个时候常用的解决方法就是回调函数 / 事件驱动来使其达到同步的目的。
例子:
const fs = require('fs')
function getMime() {
fs.readFile('mime.json',function(err,data) {
// console.log(data.toString());
return data.toString();
})
}
console.log(getMime()); // undefined 原因:当执行到readFile()时,由于是异步读取文件,故该函数执行完成,首先返回了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()
// 广播和 接收广播
// 监听 to_parent的广播
/*EventEmitter.on('to_parent', (data) => {
// 监听到广播后才执行回调
console.log(`接收到了这个广播事件的数据:${data}`) // 2.接收到了这个广播事件的数据:send
})
setTimeout(() => {
console.log('开始广播...') // 1.开始广播
// 广播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())
}) // 接收广播拿到传来的数据
总结: