async 和 await

来源于我的有道云笔记,日期:2022.08.10

async 函数

async 修饰的函数为异步函数,返回结果是一个 Promise 对象。

asyncFun = async function() {
  console.log("异步函数");
  return 1;
}
asyncFun.then((e) => {
  console.log(e);
})

语句输出:

1

如果 async 函数返回的是一个 Promise 对象,比如:

async function f(){
    let p = new Promise((res,rej)=>{

    })
    return p;
}
f().then().catch();

此情况就和一般的 async 函数一样,没有什么差异,直接输出 p 会得到 promise 对象,而且需要 thencatch 来获取其内部 p 的结果。

async function f(){
    let p = await new Promise((res,rej)=>{

    })
	
    return p;
}

此时返回的 p 就是 resrej 的参数,就和普通函数返回的一样,但如果直接输出 f 函数,得到的依然是一个 promise 对象,而且 thencatch 失效。


如果 await 后面的异步操作出错,那么等同于 async 函数返回的 Promise 对象被 reject

async function f() {
  await new Promise(function (resolve, reject) {
    throw new Error('出错了');
  });
}

f()
.then(v => console.log(v))
.catch(e => console.log(e))
// Error:出错了

防止出错的方法

将其放在 try...catch 代码块之中。

async function main() {
  try {
    const val1 = await firstStep();
    const val2 = await secondStep(val1);
    const val3 = await thirdStep(val1, val2);

    console.log('Final: ', val3);
  }
  catch (err) {
    console.error(err);
  }
}

说白了,async 也是一个 Promise 对象,我们可以在 async 后面加上 then 或者 catch 这个东西来防止出错。

推荐阅读:async 函数原理及使用方法 - 小饿爽 - 博客园


await 语句

需要注意一些点:

  • await 必须在 async 函数内才可以使用。
  • 单一的 promise 对象也可以使用。
  • 其作用是阻塞代码的继续执行。
asyncFun = async function(){
    let n = await new Promise((res)=>{
            res("ok");
    })
    
    return n;
}

result = async function(){
    console.log(await asyncFun());
}

result();

语句输出:

ok
posted @ 2025-04-06 14:56  yueyingyifeng  阅读(24)  评论(0)    收藏  举报