美文网首页
promise的理解

promise的理解

作者: 波仔_4867 | 来源:发表于2021-05-09 13:34 被阅读0次
        promise用来解决回调地狱的问题,把异步的代码用同步的方式来实现
    
        Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
        它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
    
        一个Promise的三种状态
        pending: 初始状态,既不是成功,也不是失败状态。
        fulfilled: 意味着操作成功完成。
        rejected: 意味着操作失败。
    
        Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
        Resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
        Reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
    
        Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。
    
    
        demo1==============================================
    
           let flag = true;
           function task() {
               return new Promise(function (resolve, reject) {
                   //同步代码,立即执行
                   console.log('执行promise回调中的代码');  
                   if (flag) {
                       // 只有调用resolve时,才会执行then中的回调
                       // resovle触发的then中的回调是异步操作
                       resolve('success')
                   } else {
                       // 只有调用reject时,才会执行catch中的回调
                       // reject触发的catch中的回调是异步操作
                       reject('error')
                   }
               })
           }
           task()
           .then(function(msg){
               console.log(msg);
           })
           .catch(function(err){
               console.log(err);
           })
          promise.all([ajax1(),ajax2()])当ajsx1和ajax2都返回数据时触发
          .then()当ajsx1和ajax2都成功时调用的函数
           .catch()当ajsx1和ajax2任一函数失败时调用的函数
          promise.race([ajax1(),ajax2()])看谁先执行完函数时触发
           .then()当ajsx1和ajax2谁先执行完且成功是调用
           .catch()失败时调用
    
           asyne和await是promise的语法糖 
           asyne定义了一个异步函数,消除了promise中then的链式调用
           await 后面的同步代码
           asyne function reader(){
           try{     处理异常 如果此时有错误会被捕获
               let result=await ajax()
                 task(result)
       }.catch(err){
           console.log('异常时运行的代码')          
    }          
    }
    

    相关文章

      网友评论

          本文标题:promise的理解

          本文链接:https://www.haomeiwen.com/subject/pzvllltx.html