• es6-promise对象详解


    1.promise简介

    promise是es6中新出的一个对象,主要用来获取异步操作成功或者失败的结果。promise是js异步编程中的核心对象,es8中await和async也是基于promise实现的

    promise对象有3种状态,

    状态描述
    pending等待中,还未执行完
    resolved执行成功
    rejected执行失败

    状态变更:只有2种
    pending => resolved
    pending => rejected

    2.promise的优点

    避免回调地狱,promise对象执行完后,可以在then方法,或catch方法中,获取结果,then方法中也会返回一个promise对象(即便本身返回的是普通对象最终也被包装成promise对象)

    3.promise对象的创建

    let promise = new Promise((resovle,reject)=>{
        console.info("create promise object");
        setTimeout(() => {
            resovle("ok");
        });
    }).then(value=>{
        console.info("successed to promise,returned value:"+value);
    },reason=>{
        console.info("failed to execute promise,reason"+reason);
    }).catch(reason=>{
        console.error(`failed to reason:${reason}`);
    });;
    
    promise.then(value=>{
        console.info("then:"+value);
    });
    console.info("end js ......");
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    promise对象的入参单个箭头函数,箭头函数2个入参为2个函数,resolve,reject,用于成功或失败的状态变更。
    resolve的结果为then方法的第一个箭头函数的value参数,
    如果then设置了第二个参数,则promise在被reject或抛出异常的情况下会执行reason的箭头函数。

    then也会返回一个新的promise对象。
    then方法中会等到同步代码块执行完,才会执行。而promise实例化的代码是同步执行的。
    整个执行是异步的。

    如上述代码执行结果如下:
    在这里插入图片描述

    4.promise常用静态方法

    1.promise的对象方法(p1,p2,p3为promise的实例对象)
    Promise.all()并发处理多个异步任务,所有任务都执行完成才能得到结果

    Promise.all( [p1,p2,p3] ) .then ( (result) => {console.info (result);
    })
    
    • 1
    • 2

    2.Promise.race()并发处理多个异步任务,只要有一个任务完成就会返回结果
    Promise.all()并发处理多个异步任务,所有任务都执行完成才能得到结果

    Promise.race ( [p1,p2,p3] ).then ( (result)=>{
    console.log (result)
    })
    
    • 1
    • 2
    • 3
  • 相关阅读:
    ajax请求的时候get 和post方式的区别?
    数据中心为什么需要一套基础设施可视化管理系统
    Linux下gdb调试命令介绍
    昱琛航空IPO被终止:曾拟募资5亿 郭峥为大股东
    【Linux】线程池&读写锁
    【dubbo3.x trace组件分享】
    JavaWeb(十一) AJAX + json
    中国酶制剂市场预测与投资战略研究报告(2022版)
    为什么C++这么复杂还不被淘汰?
    c++ makefile + clangd 生成 compile_command.json
  • 原文地址:https://blog.csdn.net/lucky_ly/article/details/126236986