zoukankan      html  css  js  c++  java
  • Js 的 Promise

     1.Promise: 代替回调函数实现多个异步调用,顺序执行

        问题: 使用回调函数方式实现多个异步调用顺序执行会导致回调地狱(callback hell)

     根源: 所有回调函数规定在调用函数前就要提前传入到函数中

      解决: 让回调函数在函数后传入 :如下图 

      

      

      如何:

        前提: 不要在参数列表里传递回调函数了!

    1. 定义函数支持Promise

             1.在原函数内new Promise()包裹所有原代码

                             2.再在源代码外层套一层function(){}    function()中必须接收Promise附赠的open开关

                             3. 在当前函数异步任务调用后,自动打开开关open();

                      function fun(){

                       return new Promise  (  function(open){  

                               异步任务

                     异步任务执行完:open()

                     })

               }

    1. 将多个任务串联起来:

    第一个函数().then(第二个函数).then(…)

            强调: 中间的then中的函数,不要加(),因为不是立刻执行,且中间的函数必须支持Promise

      错误处理: 2:

    1. new Promise(function(open,err){

                  //如果出错:

            2.  err(“错误消息”) //通向最后的.catch()

    })

    1. 在函数1().then().then()…..catch(function(errMsg){ … })

    无论中间哪个then出错都会执行最后的catch,并将thenerr(“错误消息”)传给errMsg

    3.多个异步函数一起执行后执行同步任务 不浪费时间的做法

             Promise.all([     

                    数组中必须传入new Promise 对象

           ]).then( function(arr 用来接参数) 同步任务 )

     

          

        4.Promise 对象的三种状态

     5.es7 调用promise 时的简化

     es7 实现多个异步任务同时执行  

    (async  function ( ) {

           let  p1;   必须是支持Promise的对象

           let   p2;

          await   Promise.all([p1,p2 ]) {   

          }

        }  ) ()

  • 相关阅读:
    java获取指定文件夹下的所有文件名
    org.dom4j.DocumentException: unknown protocol: d Nested exception: unknown
    如何在spring中获取request对象
    Java获取文件后缀名
    解析XML并将信息封装到对象中
    在web项目启动时执行某个方法
    Maven Dependencies没有了的解决办法
    B-树(B+树) 学习总结
    Netty学习笔记之一(Netty解析简单的Http Post Json 请求)
    用到的设计模式总结--单例模式+工厂方法模式+Builder模式
  • 原文地址:https://www.cnblogs.com/fdbk/p/12748515.html
Copyright © 2011-2022 走看看