zoukankan      html  css  js  c++  java
  • ES6高阶 同步和异步 回调地狱 promise async和await

    promise官方网站:https://www.liaoxuefeng.com/wiki/1022910821149312/1023024413276544

    1,同步和异步

    1.1

    // 同步执行
    function fn() {
          console.log('异步')   // 1
      }
      fn()
      console.log('同步')   // 2

    1.2

    // 异步执行
      function fn() {
        setTimeout(() => {
          console.log('异步') // 2
        })
      }
      fn()
      console.log('同步') // 1

    1.3

    // 事件处理函数中有异步事件,我想等异步执行完之后在执行行下面的事情
      // 异步执行通过回调方法,fn()里传一个处理函数过去,等到
      function fn(cb) {
        setTimeout(() => {
          console.log('异步') // 1
          cb()
        })
      }
      fn(function() {
        console.log('同步') // 2
      })

    1.4   demo.js编写代码读取文件

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

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

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

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

     直接将b文件读取操作嵌套到a里,再将c文件读取操作嵌套到b里。

    此时便可以实现a、b、c文件依次读取,试验多次也一样,因为此时顺序已经固定

    因为异步操作无法保证返回结果顺序,所以需要层层嵌套回调;

    但此时嵌套层级太深,语法过于冗余,不利于后期维护

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

  • 相关阅读:
    [洛谷P1886]滑动窗口 (单调队列)(线段树)
    树状数组详细解析
    离散化
    kettle使用总结(一)
    springBoot开发的web项目打war包部署到已有的tomcat容器中
    集群时钟同步
    linux服务器安装nginx
    Tomcat学习之体系架构
    码云新建仓库上传项目
    linux系统安装mysql yum方式
  • 原文地址:https://www.cnblogs.com/shun1015/p/13141671.html
Copyright © 2011-2022 走看看