異步操做 Promise,then/catch,async/await

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下去。因此出了一個終極解決方案。ajax

  • 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)
  }
}
複製代碼
相關文章
相關標籤/搜索