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?
-简单理解就是输入到输出之间的转化过程
Node笔记四的更多相关文章
- Java IO学习笔记四:Socket基础
作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Java学习笔记四---打包成双击可运行的jar文件
写笔记四前的脑回路是这样的: 前面的学习笔记二,提到3个环境变量,其中java_home好理解,就是jdk安装路径:classpath指向类文件的搜索路径:path指向可执行程序的搜索路径.这里的类文 ...
- Java加密与解密笔记(四) 高级应用
术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- FreeMarker 生成Java、mybatis文件
FreeMarker 生成Java.mybatis文件 将mysql数据库表通过FreeMarker生成对应的Java文件和对应的mybatis文件. FreeMarker是一款模板引擎: 即一种基于 ...
- 下载Ext JS 5.1 gpl版本的方法
先进入官网:http://www.sencha.com 然后在导航的Products中选择Sencha Ext JS,会看到以下页面: 这时候不要单击Download按钮,而是要单击导航中的DETAI ...
- iOS开发 runtime实现原理以及实际开发中的应用
自己写了一个小例子:有一些相关知识点和博客文章 A: 首先现在控制器里面初始化一个对象,然后调用对象的方法: #import "ViewController.h" #import ...
- map.js的编写(js编写一个对象的方式)
// 定义map function Map() { this.container = {}; } // 将key-value放入map中 Map.prototype.put = function(ke ...
- Java集合之Hashtable
和HashMap一样,Hashtable也是一个散列表,存储的内容也是键值对key-value映射.它继承了Dictionary,并实现了Map.Cloneable.io.Serializable接口 ...
- Unity3D学习笔记(二)Unity的JavaScript基础
Update()每帧调用一次LateUpdate()在Update()后执行Awake()系统执行的第一个方法Start()在Awake()之后,Update()之前FixedUpdate()固定更新 ...
- UML之时序图
时序图,英文名曰:Sequence Diagram,也称顺序图和序列图,是一种行为图,她通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作.她可以表示用例的行为顺序,当执行一 ...
- 关于精灵帧(Sprite Frame)的尺寸大小
一个对象的精灵帧(Sprite Frame)有若干关于大小的尺寸. 比较容易混淆,这里记录下来区别: CCSpriteFrame *spriteFrame = self.spriteFrame; CG ...
- Linux下简易线程池
线程池简介 线程池是可以用来在后台执行多个任务的线程集合. 这使主线程可以自由地异步执行其他任务.线程池通常用于服务器应用程序. 每个传入请求都将分配给线程池中的一个线程,因此可以异步处理请求,而不会 ...
- Xcode出现may cause a leak非忽略的解决方法
前面提到可以把may cause a leak当成安静的美代码忽略掉,但其实还是有另一种方法滴. 你可以用如下代码替换以消除該警告: [xxx performSelector:_cmd withObj ...