异步操作 Promise,then/catch,async/await

2,962 阅读1分钟

Promise主要处理异步操作,确认异步操作完成再执行后面的语句。

js通常是单线程的,常用的异步操作有:

  • ajax请求
  • io操作(文件读取)
  • 定时器

异步操作的原理:执行到需要的异步操作,会开始执行异步操作,不等执行完直接开始执行操作后面的语句,等语句执行完全再去看异步操作是否执行完成,完成就返回完成,没有就继续执行异步。

  • 常用的异步请求操作

const promise = new Promise(function(resolve, reject) {
  // ... 请求代码

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});
  • then/catch

thenPromise执行成功的语句

promise.then(function(res){});

catchPromise执行失败的语句

promise.catch(function(err){});

常规用法

promise.then(function(res){
    
}).catch(function(err){
    
});

then滥用的话也是很恶心的,不断的then下去。所以出了一个终极解决方案。

  • async/await

async/awaitthen/catch的完美版。作用与then/catch相同,只是用法上的区别。

每遇到一个await都会先返回,再往下执行。变成了同步操作!

async f1(){
 const res = await promise;
}

可以使用try/catch监听Promise 返回状态,try为成功,catch失败

async f1() {
 try{
   const res = await promise;
  }catch(err){
   console.log(err)
  }
}