nodejs笔记——非阻塞、事件驱动

var fs = require('fs')

function fn(){
	fs.readFile('nodejs.js', (err, data) => {
		console.log(data.toString())
		//这里返回的data值是属于回调函数,不属于外面的fn函数,因此从外面拿不到这里的data值
		return data
	})

	//因为阻塞的原因无法将data值返回出去
	return data
}

console.log(fn())

上段代码中,无法获取到data值。一个是因为data属于回调函数,不属于外面的函数,所以外面拿不到这里的data值。另一个data值因为非阻塞的原因,也无法将data值返回出去。

解决方法一:用回掉函数解决非阻塞问题

function fn(callback){
	fs.readFile('nodejs.js', (err, data) => {
		console.log(data.toString())
		//利用回调函数,将data值以参数的形式传出去
		callback(data)
	})
}

fn(function(result){
	console.log(result)
})

解决方法二:用事件驱动解决非阻塞的问题

var events = require('events')
var EventEmitter = new events.EventEmitter()
function fn(){
	fs.readFile('nodejs.js', (err, data) => {
		console.log(data.toString()
		//利用事件驱动,发送自定义事件,将data值以参数的形式传出去
		EventEmitter.emit('dataInfo', data)
	})
}
fn()
//在函数执行后,监听自定义事件,并获取到data值
EventEmitter.on('dataInfo', function(data){
	console.log(data)
})

nodejs中的事件驱动

//引入事件模块
var events = require('events')
//实例化EventEmitter方法
var EventEmitter = new events.EventEmitter()

//监听自定义事件;data为接收到的数据
EventEmitter.on('to-info', function(data){})

//发送自定义事件;emit的第二个参数为携带的内容
EventEmitter.emit('to-info', '需要发送的数据')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值