zoukankan      html  css  js  c++  java
  • 浅谈JS回调地狱

    前言:

    回调地狱称之为callback hell

    主体:

    (1)分析

      

       由图分析可知,内部的异步请求依赖于上一个内部请求的结果

    (2)编写案例

    本节内容主要涉及 异步编程

      1、简单回调案例

        

       2、node案例(无法保证读取结果返回顺序的代码)

        新建文件a.txt、b.txt、c.txt

        

         然后在文件里写入内容

          

         接下来在demo.js编写代码读取文件

    var fs = require('fs')
    
    fs.readFile('./a.txt','utf8',function(error,data){
        if(error){
            /*return console.log('读取失败')*/
            /*另外,也可以手动抛出异常,阻止程序执行且返回错误信息到控制台*/
            throw error
        }
        console.log(data)
    })
    fs.readFile('./b.txt','utf8',function(error,data){
        if(error){
            /*return console.log('读取失败')*/
            /*另外,也可以手动抛出异常,阻止程序执行且返回错误信息到控制台*/
            throw error
        }
        console.log(data)
    })
    fs.readFile('./c.txt','utf8',function(error,data){
        if(error){
            /*return console.log('读取失败')*/
            /*另外,也可以手动抛出异常,阻止程序执行且返回错误信息到控制台*/
            throw error
        }
        console.log(data)
    })

        这里需要注意的是哪一个文件先读取出来,与读取顺序无关,主要和文件大小和操作系统的调度机制有关,为什么呢?

    读取操作为异步代码,不会等待其读取完再依次往下执行,所以返回结果的顺序不一定是按照读取编写顺序

        接下来,我们多次测试下该脚本文件,看看返回的读取结果顺序,如下所示

        

         这里我们发现获取读取结果的顺序并不一定,可能每次顺序都不同... ...

      3、需求

        这里我们提出一个需求,希望返回的读取结果固定顺序依次为a、b、c文件内容,所以接下来通过“回调嵌套”的方式来保证顺序

        

    直接将b文件读取操作嵌套到a里,再将c文件读取操作嵌套到b里。
    此时便可以实现a、b、c文件依次读取,试验多次也一样,因为此时顺序已经固定

        

    (3)分析

    因为异步操作无法保证返回结果顺序,所以需要层层嵌套回调;
    但此时嵌套层级太深,语法过于冗余,不利于后期维护

      

    (4)小结

    1.因为javascript是单线程的,所以有些需要等待的地方,需要使用回调函数。
    2.由于某些业务的问题,在代码中会一次性写会多层的回调嵌套,回调嵌套后的代码的维护难度,和无法排除bug。这个就被称作回调地狱。
    3.我在工作中,一般处理的方式是使用promise或者async函数。
    4.promise由于xxxx 对于开发这种多层嵌套的代码很方便,降低了代码的维护难度等等。
    5.promise是XXX时新增的,拥有着xxxx的特性等等。
    6.promise下面的all函数我也经常用到xxxxxxx
    7.你甚至还可以手写个promise!

    .

  • 相关阅读:
    新概念英语第四册16-30课(转)
    新概念英语第四册01-15课(转)
    通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建(转载)
    BASE64编码规则及C#实现
    Lucene资料汇总
    SQL Server性能监控
    Fedex接口和测试账户
    css语法
    POI操作Excel常用方法总结 (转)
    java eclipse中的代码联动提示功能
  • 原文地址:https://www.cnblogs.com/jianxian/p/12264661.html
Copyright © 2011-2022 走看看