JavaScript async 函數

async 函數是什麼?

  • async函數是什麼?一句話,它就是 Generator 函數的語法糖。
  • 當async函數執行時,遇到await就會中止等待,直到異步操做完整以後,再繼續往下執行。
  • 下面是一個例子,指定多少毫秒後函數返回一個值異步

    async function asyncReturn(value, ms) {
        await new Promise(function(resolve, reject) {
            setTimeout(resolve, ms);
        });
        return value;
    }
  • async函數返回一個 Promise 對象,可使用then方法添加回調函數。而且,async函數內部return語句返回的值,會成爲then方法回調函數的參數。async

    asyncReturn('Hello World', 3000).then(value => {
        console.log(value);
    });

async 函數的錯誤處理機制

  • async函數內部拋出錯誤,會致使返回的 Promise 對象變爲reject狀態。拋出的錯誤對象會被catch方法回調函數接收到。函數

    async function fn1() {
        throw new Error('async 函數內部拋出錯誤了!');
    }
    fn1().catch(err => {
        console.log(err);
    });
  • await命令後面的 Promise 對象若是變爲reject狀態,則reject的參數會被catch方法的回調函數接收到。code

    async function fn2() {
        await Promise.reject('await命令後面的 Promise 對象變爲reject狀態');
    }
    fn2().catch(err => {
        console.log(err);
    });
  • 只要一個await語句後面的 Promise 變爲reject,那麼整個async函數都會中斷執行。對象

    async function fn3() {
        await Promise.reject('出錯了');
        await Promise.resolve('hello world'); // 不會執行
    }
    fn3().catch(err => {
        console.log(err);
    });
相關文章
相關標籤/搜索