异步操作
-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? -简单理解就是输入到输出之间的转化过程