oliver1204 / randomNotes

用来记录平时的日常总结
1 stars 0 forks source link

async/await 函数 #87

Closed oliver1204 closed 5 years ago

oliver1204 commented 5 years ago

简介

async/await 用法

async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。当函数执行的时候,一旦遇到 await 就会先返回一个 Promise 对象,等到异步操作完成,再接着执行函数体内后面的语句。

我们先来模拟一个请求:

function ajax {
  return new Promise(resolve => {
    setTimeout(resolve, 1000);
  });
}

用then 的方式写,如下:

ajax()
.then(() => {
   console.log(value);
})

上面的方法用async/await 的写法,如下:

let asyncPrint = async (value) => {
  await ajax();
  console.log(value);
}
asyncPrint('hello world');

async/await 错误处理

function ajax() {
  return new Promise(resolve, reject => {
    setTimeout(reject, 5000);
  });
}
async function asyncPrint(value) {
  await ajax();
  return value
}
asyncPrint('hello world')
.then(result=> {
  console.log(result);
})
.catch(err=>{
  console.log(err)
})
function ajax() {
  return new Promise(resolve, reject => {
    setTimeout(reject, 5000);
  });
}
async function asyncPrint(value) {
  try{
    await ajax();
    console.log(value)
  }catch(err){
    console.log(err)
  }
  await ajax();
  return value
}
asyncPrint('hello world');
  1. await 后面紧跟着的最好是一个耗时的操作或者是一个异步操作(当然非耗时的操作也可以的,但是就失去意义了)
  2. 如果 await 后面的异步操作出错,那么等同于 async 函数返回的 Promise 对象被 reject

主动抛出错误

笔者不知道有没有更好的方式,目前笔者借用的是Promise.reject() 方法来处理的。

if(response.success) {
    return response.data
} else {
    return Promise.reject(response); 
}