zoukankan      html  css  js  c++  java
  • promise、async和await

    async:
    async function 声明将定义一个返回 AsyncFunction 对象的异步函数。
    当调用一个 async 函数时,会返回一个 Promise 对象。当这个 async 函数返回一个值时,Promise 的 resolve 方法会负责传递这个值;当 async 函数抛出异常时,Promise 的 reject 方法也会传递这个异常值。
    (async函数返回一个 Promise 对象,当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。)

    await:
    语法:[return_value] = await expression;
    表达式(express):一个 Promise 对象或者任何要等待的值。返回值(return_value):返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
    (await必须和async一起使用)

    // demo1的setTimeout完成后执行demo2
    function demo1(){
        return new Promise(function(resolve, reject){
            //异步操作
            setTimeout(function(){
                resolve({
                    type:'success',
                    data:'demo1的async异步完成'
                });       
            }, 1000);
        });          
    }
    
    function demo2(){
        console.log('我是demo2')
    }
    
    
    async function getP(){
        const p = await demo1(); // {type:'success',data:'demo1的async异步完成'}
        return p; 
    }
    
    //getP()是一个Promise 对象
    getP().then((res)=>{
        console.log(res.data); // demo1的async异步完成
        demo2();
    })
    
    // 运行的结果:
    // demo1的async异步完成
    // 我是demo2
     

    Promise:

    Promise是一个构造函数,身上有all、reject、resolve这几个方法,原型上有then、catch方法.

    all:并行执行异步操作,并且在所有异步操作执行完后才执行回调;

    resolve:异步操作执行成功后的回调函数

    reject:异步操作执行失败后的回调函数,把Promise的状态置为rejected,我们在then中能捕捉到,然后执行“失败”情况的回调;

    then:用于多层回调,(可传两个函数,第一个是成功的回调,第二个是失败的回调函数)

    catch:在执行resolve的回调(也就是hen中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中

    用法:

    调用方式二:
    resolveMethods1()
    .then(function (data) {
        console.log(data);
        return resolveMethods1();
    })
    .catch(function (data) {
        console.log(data);
        return resolveMethods2();
    })
    .then(function (data) {
        console.log(data);
    })
    .catch(function (data) {
        console.log(data);
    });
    结果如下(方式一和方式二的结果是一样的):

    promise、async和await之执行顺序可参考:https://lvdingjin.github.io/tech/2018/05/27/async-and-await.html

  • 相关阅读:
    微信消息推送和支付宝支付
    django rest framework
    Redis
    flask_migrate
    flask 学习
    windowsserver补丁
    mysql 8.0.23密码更新方法
    交换机配置实例
    爱国论坛OPENWRT
    openwrt资料
  • 原文地址:https://www.cnblogs.com/darkbluelove/p/11338378.html
Copyright © 2011-2022 走看看