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 ]) {   

          }

        }  ) ()

  • 相关阅读:
    SecureCRT乱码问题简单的解决办法
    安家博客园,开始java web 之旅
    Java Service Wrapper使用心得
    vsftp折腾
    mysql更改数据库表名称和svnerve启动版本库命令、执行jar命令
    Linux 命令积累2
    二进制与十进制的转换
    java Map代替List在for循环中的应用
    Optional 的应用
    java Date、java.sql.Date、localTime、SimpleDateFormat的格式及应用
  • 原文地址:https://www.cnblogs.com/fdbk/p/12748515.html
Copyright © 2011-2022 走看看