8 NodeJS笔记

2018-05-03  本文已影响0人  brightsunp

1 异步编程

Node采用V8引擎处理JS脚本,最大特点就是单线程运行,一次只能运行一个任务;这导致大量采用异步操作,即任务不马上执行,而是插在任务队列的尾部,等前面的任务运行完再执行。
约定:回调函数应该是某个函数的最后一个参数;回调函数的第一个参数,是上一步传入的错误对象(没有错误传入null)。原因是传统的try...catch机制对异步操作行不通,只能把错误交给回调函数来处理。

# 异步
var task = function(value, callback) {
    if (value === true) {
        callback(null, "Value was true.");
    } else {
        callback(new Error("Value is not true!"));
    }
};

var callback = function(error, value) {
    if (error) {
        return console.log(error);
    }
    console.log(value);
};

# 同步
function main() {
    syncA();
    syncB();
    syncC();
}
try {
    main();
} catch (error) {
    // Deal with exception.
}

2 异常处理

Node是单线程运行环境,所以一旦抛出的异常没有被捕获,将会引起整个进程的崩溃。

2.1 try...catch

无法捕获异步代码抛出的异常;所以Node在很少的场合使用try/catch语句,比如JSON.parse解析JSON文本。

2.2 回调函数

将错误对象作为回调函数的第一个参数,就避免了捕获代码与发生错误不在同一个时间段的问题。

fs.readFile('./foo.txt', function(err, data) {
    if (err !== null) throw err;
    console.log(data);
});

2.3 EventEmitter的error事件

var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
emitter.emit('error', new Error('Something bad happened'));
# 对error事件部署监听函数
emitter.on('error', function(err) {
    console.log('Error: ' + err.message);
});

2.4 uncaughtException和unhandledRejection事件

以后再整理。

3 网络操作

上一篇下一篇

猜你喜欢

热点阅读