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-异步操作的更多相关文章

  1. git npm包管理

    #Node # node 一.安装nodejs 下载地址:http://nodejs.cn/download/ 二.安装git 下载地址:https://git-scm.com/download/wi ...

  2. async/await与promise(nodejs中的异步操作问题)

    此文只是粗略介绍使用方法,欲了解核心概念请参考官方文档或其他资料. 举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文 ...

  3. NodeJS用递归实现异步操作的链式调用,完成一个简易的命令行输入输出REPL交互接口

    REPL —— Read-Eval-Print-Loop. 00.一门好的编程语言的必要条件 REPL并不是什么高大上的东西,简单的说就是一个从命令行程序,读取终端输入,处理,打印结果,如此循环.这是 ...

  4. Nodejs事件引擎libuv源码剖析之:高效线程池(threadpool)的实现

    声明:本文为原创博文,转载请注明出处. Nodejs编程是全异步的,这就意味着我们不必每次都阻塞等待该次操作的结果,而事件完成(就绪)时会主动回调通知我们.在网络编程中,一般都是基于Reactor线程 ...

  5. nodejs事件轮询详述

    目录 概述 nodejs特点 事件轮询 关于异步方法 概述 关于nodejs的介绍网上资料非常多,最近由于在整理一些函数式编程的资料时,多次遇到nodejs有关的内容.所以就打算专门写一篇文章总结一下 ...

  6. Nodejs - 如何用 eventproxy 模块控制并发

    本文目标 本文的目标是获取 ZOJ 1001-1010 每道题 best solution 的作者 id,取得数据后一次性输出在控制台. 前文 如何用 Nodejs 分析一个简单页面 我们讲了如何用 ...

  7. NodeJs并发异步的回调处理

    这里说并发异步,并不准确,应该说连续异步.NodeJs单线程异步的特性,直接导致多个异步同时进行时,无法确定最后的执行结果来回调.举个简单的例子: for(var i = 0; i < 5; i ...

  8. nodejs的第四天学习笔记

    一. ECMAScript6(es2015)es6语法 es6/es2015,在es5的基础上扩展了很多新的功能,我们要学习仅仅是es6中的部分常用新功能,这些功能在使用的时候一定要慎重,因为他们之中 ...

  9. NodeJS中的异步I/O、事件驱动

    nodejs的主要特点是单线程.异步I/O.事件驱动.让我们先大概了解一下这些名词的意思. 单线程 单线程是任务按照顺序执行的,并且每次只执行一个任务,只有前面的任务执行完成以后,后面的任务才执行.在 ...

  10. NodeJS学习三之API

    Node采用V8引擎处理JavaScript脚本,最大特点就是单线程运行,一次只能运行一个任务.这导致Node大量采用异步操作(asynchronous opertion),即任务不是马上执行,而是插 ...

随机推荐

  1. 笨办法学Python(十五)

    习题 15: 读取文件 你已经学过了 raw_input 和 argv,这些是你开始学习读取文件的必备基础.你可能需要多多实验才能明白它的工作原理,所以你要细心做练习,并且仔细检查结果.处理文件需要非 ...

  2. Educational Codeforces Round 14 - F (codeforces 691F)

    题目链接:http://codeforces.com/problemset/problem/691/F 题目大意:给定n个数,再给m个询问,每个询问给一个p,求n个数中有多少对数的乘积≥p 数据范围: ...

  3. mysql主从分离

    1.工具: 两台机器 master:192.168.0.1 slave:192.168.0.2 2.master的配置 找到mysql的配置文件,一般centos的是/etc/my.cnf,ubunt ...

  4. QT学习之QScript

    QT中有解析Json的一个类叫QScript.貌似还有一个QJson,但听说解析的方便性不如QScript,具体没有深入探究,这里仅简单记录一下QScript的使用. 首先,主要使用到的类有QScri ...

  5. java运行顺序-JVM之九

    简化顺序版本是: 父类的静态成员赋值和静态块,代码排版先后顺序执行,只运行一次 子类的静态成员赋值和静态块,代码排版先后顺序执行,只运行一次 父类代码块 父类构造方法 子类初始化块 子类构造方法 再次 ...

  6. ios各层

    数据持久层.业务逻辑层.表示层 数据持久层: 持久化(Persistence)意思就是当你退出app的时候它还会存在. dao层:DAO (Data Access Object) 数据访问对象是一个面 ...

  7. spfa判负权边

    spfa判负环 如果一个点在spfa中被入队了大于n次 那么,我们就能肯定,有负环出现. 因为一个点入队时,他肯定被更新了一次. 所以........ 如果不存在负权环.这个点最多被更新节点数次 我们 ...

  8. 带有data-ng-bind表达式

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  9. vue 城市搜索组件

    1.实现大致是如下效果 2.搜索组件的页面结构 <template>    <div>     <div class="search">     ...

  10. 通过ip地址访问同一局域网下已经启动的angular项目

    通常tomcat启动的项目同一局域网下我们都可以访问.angular启动的前台项目别人怎么访问,一直不懂,后来知道启动命令加个参数就行了 首先查看本机ip 第二步,启动命令里加上--host 本机ip ...