Node笔记四

异步操作
-Node采用chrome v8 引擎处理javascript脚本
--v8最大特点就是单线程运行,一次只能运行一个任务
-Node大量采用异步操作
--任务不是马上执行,而是插在任务队列的尾部,等前面的任务运行完成后坐在执行
-提高代码的响应能力
回调函数设计
-对于一个函数如果需要定义回调函数
--回调好函数一定作为参数的最后一个参数出现
---function demo1(arg1,arg2,callback){}
---function demo2(arg1,callback1,callback2){}
--回调函数的第一个参数默认接受错误信息,第二个参数才是真正的回调数据(便于外界回去调用的错误情况)
---demo1(arg1,arg2,function(error,data){
if(error) throw error;
console.log(data);
});
--错误优先的回调函数
---约定将错误信息作为回调的第一个参数,第一个参数为上一步的错误信息
---因为之后的操作大多数都是异步的方式,无法通过try catch捕获异常

强调错误优先
-node大多数都是异步的操作方式,无法通过try catch捕获异常
-错误优先的回调函数
--第一个参数为上一步的错误信息
回调函数的问题>相对于传统代码
-不容易阅读
-不容易维护
-不容易调试
-回调黑洞
--解决方法:promise等

演示代码:
function isEvenOrOdd(number,callback) {
if (typeof number === 'number') {
if (number % 2) {
callback(null,'number is even');
}else{
callback(null,'number is odd');
}
} else {
//throw new Error('input not number -- throw');
callback(new Error('input not number -- callback'));
}
}
isEvenOrOdd(2,(error,data) =>{
if(error) throw error;
console.log(data);
});

isEvenOrOdd(3,(error,data) =>{
if(error) throw error;
console.log(data);
});

isEvenOrOdd('myString',(error,data) =>{
if(error) throw error;
console.log(data);
});

什么是异步?
-日常生活中
--打电话
--发短信
-程序世界中
--setTimeout()
--$.ajax()
--文件操作
--Node所有的会发生阻塞的操作都是异步
-归根结底,所有需要异步的操作都是基于'网络操作'和'磁盘操作'做两个方面的。
什么是I/O?
-简单理解就是输入到输出之间的转化过程

原文地址:https://www.cnblogs.com/nordon-wang/p/6038778.html