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

转载于:https://www.cnblogs.com/darkbluelove/p/11338378.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promiseasync和await都是JavaScript中处理异步操作的方法。 Promise是一种用于处理异步操作的对象,它可以表示一个异步操作的最终完成或失败,并返回相应的结果。Promise提供了一系列的方法,如resolve()、reject()、then()、catch()、all()和race()等等,用于处理异步操作的状态和结果。 async/await是JavaScript中处理异步操作的一种语法糖,它可以让异步代码看起来更像同步代码,更易于理解和编写。async用于声明一个函数是异步的,而await用于等待一个异步方法执行完成。使用async/await可以在函数内部直接使用await关键字来等待一个Promise对象的结果,而不需要使用then()和catch()方法来处理回调。 实际上,Promiseasync/await在处理异步操作上的结果是一样的,只是async/await更加直观和易于理解。 如果你想更深入地了解异步解决方案,可以参考「硬核JS」深入了解异步解决方案的文档。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Promiseasync/await的理解](https://blog.csdn.net/qq_44738313/article/details/125659225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值