Nodejs笔记 Nodejs非阻塞IO、异步及事件驱动EventEmitter解决异步

一、非阻塞

1.1 非阻塞

var fs = require('fs');

// 非阻塞
console.log('1');

fs.readFile('mime.json', function(err, data) {
    // console.log( data );
    console.log('2');
})

console.log('3');

1.2 非异步

function getMime() {
    return 123;
}
console.log( getMime() ); // 123

1.3 异步

function getMime() {
    fs.readFile('mime.json', function(err, data) {
        // console.log( data.toString() );
        return data;
    })
}
console.log( getMime() ); // undefined,拿不到数据

解决方法如下二、三

二、回调函数

function getMime(callback) {
    fs.readFile('mime.json', function(err, data) {
        callback( data );
    })
}
getMime(function(result) {
    console.log( result.toString() );
})

三、事件驱动

3.1 案例一

var fs = require('fs');
// 引入events模块
var events = require('events');

var EventEmitter = new events.EventEmitter();

// 广播 和 接收广播
// 监听to_parent的广播
EventEmitter.on('to_parent', function(data) {
    console.log( data );
})

setTimeout(() => {
    console.log('开发广播。。。');
    // 广播to_parent事件
    EventEmitter.emit('to_parent', '发送的数据');
}, 2000);

3.2 案例二

var fs = require('fs');
// 引入events模块
var events = require('events');

var EventEmitter = new events.EventEmitter();


// 广播 和 接收广播
EventEmitter.on('to_mime', function(data) {
    console.log( data );
})
// 监听to_parent的广播
EventEmitter.on('to_parent', function(data) {
    console.log( data );
    EventEmitter.emit('to_mime', '给mimi发送的数据');
})

setTimeout(() => {
    console.log('开发广播。。。');
    // 广播to_parent事件
    EventEmitter.emit('to_parent', '发送的数据');
}, 2000);

var EventEmitter = new events.EventEmitter();
function getMime() {
    fs.readFile('mime.json', function(err, data) {
        if(err) {
            console.log(err);
            return false;
        } else {
            EventEmitter.emit('data', data.toString() );
        }
    })
}

getMime();
EventEmitter.on('data', function(result) {
    console.log( result );
})

你可能感兴趣的:(Node.js)