promise和async/await的随记(一)

对于promise,之前多用在对调取接口的封装中,也有很多其他地方的用法,但用的一直不熟,今天特地拿出来梳理一下;

Promise实列有三个状态:

  • pending (进行中)

  • resolved (成功)

  • rejected(失败)

常用的方法有:then()、catch()、all()、race()、finally()。

let obj = new Promise((resolve,reject) => {
  //...
  resolve('resolve success')
  console.log('after resolve');
  reject('reject error');
});
obj.then(result => {
    console.log(result);
});

obj.catch(result => {
    console.log(result);
})

obj.finally(result => {
    console.log(result);
})

async用于申明一个function是异步的,而await可以认为是async wait的简写,等待一个异步方法执行完成。需要注意的是:await只能用在async函数里面。async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。

下面一个例子,执行顺序。

async function func() {
    console.log(0);
    
    await new Promise(resolve => {
        setTimeout(() => {
            console.log(1);
            resolve();
        }, 1000);
    });

    setTimeout(() => {
        console.log(2);
    }, 0);

    console.log(3);
}

func();
// 0
// 1 ---2秒后执行
// 3
// 2

await会 在你Promise返回结果后才会执行async后面的语句,若Promise不返回结果:resolve / reject,那么后面的代码就不会执行

async function func() {
    console.log(1);
    await new Promise(function(resolve, reject) {
        setTimeout(function() {
            console.log(2);
        }, 2000);
    });
    console.log(3);
}
func();
// 1
// 2 ---2秒后输出
// 3不会被执行到

如果 await 后面的 Promise 返回一个reject状态的结果的话,则会被当成错误在后台抛出

async function func() {
    console.log(1);
    var result = await new Promise(function(resolve, reject) {
        setTimeout(function() {
            reject(2);
        }, 2000);
    });
    console.log(3);
}
func();
// 1
// Uncaught (in promise) 2 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值