Nodejs-异步操作
1.阻塞
console.time('main');//代码计时器
//不断循环阻塞了代码的执行
for(var i=0;i<10000000;i++){
}
console.timeEnd('main');
console.log("完成执行了");
2.错误优先的回调函数(针对异步操作)
异步回调函数的设计
(1)回调函数一定作为最后一个参数出现
funtion foo1(name,age,callback){}
funtion foo2(value,callback1,callback2){}
(2)回调函数的第一个参数默接受错误信息,第二个参数才是真正的回调数据(便于外界获取调用的错误情况)
callback(null,data);第一个参数一般设置为错误的对象,第二个参数才是真正的数据,null就是没有错误
为什么要把回调函数多加一个参数呢?
因为在程序执行过程中,有可能出现错误,出现错误要让外界知道,采用的方式就是以参数形式传递(因为异步的时候,是无法通过try catch捕获异常,出了错误,外界是没法知道的)
约定将错误信息作为回调的第一个参数,为上一步的错误信息
function isEventOrOdd(number,callback){
if(typeof number==='number'){
if(number%2){
callback(null,'当前传入的是奇数');
}else{
callback(null,'当前传入的是偶数');
}
}
else{
callback(new Error('你传入的不是数字'));
}
}
isEventOrOdd(10,(error,data)=>{
if(error) throw error;
console.log(data);
});
isEventOrOdd(11,(error,data)=>{
if(error) throw error;
console.log(data);
});
isEventOrOdd('asda',(error,data)=>{
if(error) throw error;
console.log(data);
});

运行结果:

3.异步
setTimeout()
$.ajax()
文件操作
Node所有的会发生阻塞的操作都是异步的


4.
Node采用chrome V8引擎处理JavaScript脚本,V8最大的特点就是单线程运行,一次只能运行一个任务。
Node大量采用异步操作(asynchronous operation),即任务不是马上执行,而是插在任务队列尾部,等到前面的任务运行完之后再执行。
提高代码的响应能力
多线程的缺点:
(1)创建线程耗费资源
(2)线程数量有限
(3)CPU在不同线程之间转换,有个上下文转换,这个转换非常耗时间
Node最大的性能优势,就是单线程
Nodejs-异步操作的更多相关文章
- git npm包管理
#Node # node 一.安装nodejs 下载地址:http://nodejs.cn/download/ 二.安装git 下载地址:https://git-scm.com/download/wi ...
- async/await与promise(nodejs中的异步操作问题)
此文只是粗略介绍使用方法,欲了解核心概念请参考官方文档或其他资料. 举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文 ...
- NodeJS用递归实现异步操作的链式调用,完成一个简易的命令行输入输出REPL交互接口
REPL —— Read-Eval-Print-Loop. 00.一门好的编程语言的必要条件 REPL并不是什么高大上的东西,简单的说就是一个从命令行程序,读取终端输入,处理,打印结果,如此循环.这是 ...
- Nodejs事件引擎libuv源码剖析之:高效线程池(threadpool)的实现
声明:本文为原创博文,转载请注明出处. Nodejs编程是全异步的,这就意味着我们不必每次都阻塞等待该次操作的结果,而事件完成(就绪)时会主动回调通知我们.在网络编程中,一般都是基于Reactor线程 ...
- nodejs事件轮询详述
目录 概述 nodejs特点 事件轮询 关于异步方法 概述 关于nodejs的介绍网上资料非常多,最近由于在整理一些函数式编程的资料时,多次遇到nodejs有关的内容.所以就打算专门写一篇文章总结一下 ...
- Nodejs - 如何用 eventproxy 模块控制并发
本文目标 本文的目标是获取 ZOJ 1001-1010 每道题 best solution 的作者 id,取得数据后一次性输出在控制台. 前文 如何用 Nodejs 分析一个简单页面 我们讲了如何用 ...
- NodeJs并发异步的回调处理
这里说并发异步,并不准确,应该说连续异步.NodeJs单线程异步的特性,直接导致多个异步同时进行时,无法确定最后的执行结果来回调.举个简单的例子: for(var i = 0; i < 5; i ...
- nodejs的第四天学习笔记
一. ECMAScript6(es2015)es6语法 es6/es2015,在es5的基础上扩展了很多新的功能,我们要学习仅仅是es6中的部分常用新功能,这些功能在使用的时候一定要慎重,因为他们之中 ...
- NodeJS中的异步I/O、事件驱动
nodejs的主要特点是单线程.异步I/O.事件驱动.让我们先大概了解一下这些名词的意思. 单线程 单线程是任务按照顺序执行的,并且每次只执行一个任务,只有前面的任务执行完成以后,后面的任务才执行.在 ...
- NodeJS学习三之API
Node采用V8引擎处理JavaScript脚本,最大特点就是单线程运行,一次只能运行一个任务.这导致Node大量采用异步操作(asynchronous opertion),即任务不是马上执行,而是插 ...
随机推荐
- 初看Mybatis 源码 (二) Java动态代理类
先抛出一个问题,用过Mybatis的都知道,我们只需要定义一个Dao的接口,在里面写上一些CRUD相关操作,然后配置一下sql映射文件,就可以达到调用接口中的方法,然后执行sql语句的效果,为什么呢? ...
- Windows下安装ElasticSearch及工具
转载自个人主页 前言 什么是ElasticSearch 官网如是介绍:Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能 ...
- vue - 绑定css、style
1.绑定html css1.1对象语法: 传给 v-bind:class 一个对象,以动态地切换 class <div v-bind:class="{ active: isActive ...
- GitLab-Runner 安装配置
https://docs.gitlab.com/runner/install/linux-repository.html 直接看官方教程 systemctl status gitlab-runner. ...
- C盘压缩,电脑无法正常启动的解决方法?
有时候,我们觉得电脑很卡,因此压缩磁盘来节约资源,前段时间,由于不小心将C盘压缩了,导致电脑无法正常启动,查了一些有关的资料,发现很多人都遇到过类似的问题,如果你不想重装系统的话,那么,现在我说一下我 ...
- 安装php的memcache扩展
linux: 安装环境 RHEL 4 Php 5.2.6 所需软件 libevent-1.4.6-stable.tar.gz (http://monkey.org/~provos/libevent/) ...
- 种类并查集,TOJ(1706)
题目链接:http://acm.tju.edu.cn/toj/showp1706.html 很类似Poj的一道帮派的问题,记得找到的可疑的关系,不要将集合刷新就可以了. 1706. A Bug's ...
- rsync安装配置实时同步
一.简介 1.认识 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“Rsync算法”来使本地和远 程两个主 ...
- 散度(Divergence)和旋度(Curl)
原文链接 散度(Divergence) 散度的讨论应从向量和向量场说起.向量是数学中研究多维计算的基本概念.比如,速度可以分解为相互独立的分量,则速度就是一个多维的向量.假如空间中的每一个位置都有一个 ...
- data-ng-init 指令
1.data-ng-init指令为AngularJS应用程序定义了一个初始值. 2.通常情况下,data-ng-init指令并不常用,将会使用控制器或模块来代替它.