初識async函數

爲何會出現async函數

首先從大的方面來講,出現async函數時爲了解決JS編程中的異步操做,再往具體說就是爲了對以往異步編程方法的一種改進,也有人說僅僅只是Generator 函數的語法糖,這個我暫時還沒理解到那個程度,由於我對Generator仍是隻知其一;不知其二,等理解透一些了會專門寫篇文章記錄一下的。回到async函數,它算是階段性的解決了異步編程的問題,也就是說讓咱們無限接近了異步編程的最高境界,就是不用關心它是否是異步,一切都是同步編程的寫法,那樣可讀性就很強了。node

什麼是async函數

async函數是ES2017標準新引入的,使得異步操做變得更加方便。例如在nodejs中使用async函數讀取兩個文件,能夠這樣es6

const fs = require('fs');
const asyncReadFile = async function () {
  const f1 = await readFile('/etc/fstab');
  const f2 = await readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

async函數實際上就是對Generator函數的改進,體如今如下四點。shell

  • 內置執行器
    • 也就是說async函數能夠像普通函數那樣一行直接執行
  • 更好的語義
    • 這個基本上來講就是async裏面包的是異步操做,而await獲得的就是異步操做的結果
  • 返回值是 Promise
    • async函數的返回值是 Promise 對象,這比 Generator 函數的返回值是 Iterator 對象方便多了。你能夠用then方法指定下一步的操做。

簡單用法和使用感覺

  • 簡單用法
    • async函數裏面包含的一個異步操做,而異步操做結果則由await接收,這個返回值是一個promise對象,因此就有可能成功或者失敗,因此最好是作一些錯誤處理,通常使用try..catch
    async function myFunction() {
    try {
      await somethingThatReturnsAPromise();
    } catch (err) {
      console.log(err);
    }
    }
    • 還有一點,await 命令只能用在 async 函數之中,若是用在普通函數,就會報錯。
    • 若是確實但願多個請求併發執行,可使用 Promise.all 方法。,這個暫時還沒試過
  • 由於最近換了工做,公司技術棧就就大量的使用了async函數,就最近幾天的使用下來,最大的感覺就是代碼確實更好理解了,畢竟至關於用同步的語法在寫異步代碼了,至於其餘深刻的用法還在探索中,在後續的使用中還有什麼別的心得與體會仍是持續更新,文中有什麼理解不到位的,歡迎留言討論!
  • 還有一點體會就是:**不管是新技術仍是老技術,不在實際項目中用一下的話永遠只會存在本身的記憶深處!**像這個async函數以前就在阮一峯老師的es6教程中看過,但是看過歸看過居然再次看到時都沒什麼印象了,因此新的技術仍是要用的,不用光看看的話永遠只是一個看客,努力實踐吧,哈哈,就這樣!

參考文章:http://es6.ruanyifeng.com/#docs/async編程

相關文章
相關標籤/搜索