zoukankan      html  css  js  c++  java
  • 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最大的性能优势,就是单线程

  • 相关阅读:
    USACO--2.1The Castle
    浅谈python字符串存储形式
    面向对象——一起来复习托付与事件!
    数据结构——算法之(032)(求两个串中的第一个最长子串)
    读《浪潮之巅》有感
    关于android 怎样安装 assets文件下的apk
    每日一小练——求质数
    怎样使破解网页的禁止复制黏贴
    Angularjs Nodejs Grunt 一个样例
    《TCP/IP具体解释卷2:实现》笔记--域和协议
  • 原文地址:https://www.cnblogs.com/GumpYan/p/5787074.html
Copyright © 2011-2022 走看看