zoukankan      html  css  js  c++  java
  • 异步编程

    异步编程需要改变的思维习惯

    1.异步函数

      代码如下:

    function A(){
        fs.readFile('demo.txt',function(err,data){
    
        });   
    }
    
    A();
    B()

       A,B函数执行在一个线程中,A()中的文件读取函数是异步的,在另一个新开的线程中

      


    2.思维误区  

      受同步编程思想的影响,在异步编程时,会出现如下思维误区:

      比如,想获取A()文件读取函数中数据,常常会使用return返回数据,这是错误的,错误代码如下:

    function A(){
        fs.readFile('demo.txt',function(err,data){
            return data;
        });   
    }
    
    var dataFile = A();
    B();
    console.log( dataFile.toString() );

      这显然错误,执行fs.readFile()的函数在另一个线程中,dataFile为undefine;

      如果想使用fs.readFile()中的data,应该在回调函数中调用并传值给另一函数,代码如下:

    function A(){
        fs.readFile('demo.txt',function(err,data){
            C( data );//将值传给C函数
        });   
    }
    A();
    B();

    3.深层嵌套  

      正是因为以上原因,在异步编程中总想着实现同步,结果会出现callback的深层嵌套,举例:

    fs.readFile('demo.txt',function(err,data){
        fs.readFile('demo1.txt',function(err,data){
            fs.readFile('demo2.txt',function(err,data){
                fs.readFile('demo3.txt',function(err,data){
                     
                });  
            });  
        });    
    });  

      想依次读取文件demo.txt,demo1.txt,demo2.txt,demo3.txt,就会产生深层嵌套问题,这样代码难以维护,效率低下;

      如何解决这个问题?ES6 提出了promise解决方案


         

  • 相关阅读:
    SpringIOC的小例子
    java中递归实现复制多级文件夹
    快速排序和几种简单排序
    Oracle面试的基本题
    多态的两个小例子
    单例模式
    内部类与匿名内部类
    C#
    C#
    C#
  • 原文地址:https://www.cnblogs.com/RocketV2/p/5810121.html
Copyright © 2011-2022 走看看