js中的async,await用法

原创
小哥 3年前 (2022-10-20) 阅读数 10 #Web前端
文章标签 jsES6asyncawait

async/await是Promise的语法糖

async

  • async作为一个关键字,放在函数前面表示该函数是一个异步函数。
  • async函数 返回一个 Promise对象 ,并且是resolve结果,可以使用。then方法添加了一个回调函数。
  • 只要使用async,无论函数是否在内部返回。Promise对象,将被打包Promise对象。

    // async基础语法 async function fun0(){ console.log(1); return 1; } fun0().then(val=>{ console.log(val) // 1,1 })

    async function fun1(){ console.log(Promise); return new Promise(function(resolve,reject){ resolve(Promise) }) } fun1().then(val => { console.log(val); // Promise Promise })

await

  • await 它也是一个修饰符,只能放在async在定义的函数内。

  • await 装饰IFPromise对象:你可以得到。Promise()中返回的内容resolve或reject参数),在取值之前不会执行该语句;

  • 如果不是Promise对象:将此非promise事变await表达式的结果。

    async function fun(){ let a = await 1; let b = await new Promise((resolve,reject)=>{ setTimeout(function(){ resolve(setTimeout) },3000) }) let c = await function(){ return function }() console.log(a,b,c) } fun(); // 3秒后输出: 1 "setTimeout" "function"

    function log(time){ setTimeout(function(){ console.log(time); return 1; },time) } async function fun(){ let a = await log(1000); let b = await log(3000); let c = log(2000); console.log(a); console.log(1) } fun(); // 立即输出 undefined 1 // 1秒后输出 1000 // 2秒后输出 2000 // 3秒后输出 3000

async,await配合

// 使用async/await获得成功的结果

// 定义一个异步函数,3只有在几秒钟后才能获得该值。(相似操作数据库)
function getSomeThing(){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve(获取成功)
        },3000)
    })
}

async function test(){
    let a = await getSomeThing();
    console.log(a)
}
test(); // 3秒后输出:获取成功

异常处理

await以下功能可能会出现异常,因此最好是await命令放在try…catch一段代码。如果await后是Promise对象,您还可以使用.catch抓捕。

 // 第一种写作方式
 async function myFunction() {
   try {
     await something();
   } catch (err) {
     console.log(err);
   }
 }

 // 第二种书写方法
 async function myFunction() {
   await somethingPromise()
   .catch(function (err) {
     console.log(err);
   });
 }
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除