es7 async await

koa2都支持async await了,咱們有什麼理由不用呢,既然要用,確定要先簡單瞭解下。promise

只是個函數

首先要說明的這是一個函數,就想function *(){}同樣,只是一個函數而已。只不過是函數,generator函數,async函數區分而已。koa

既然叫async函數,而不是普通函數,那麼它確定有本身的一些特性:async

async返回一個promise對象

async function test() {
    //throw new Error('hello error');
   // await Promise.reject('hello error');
    return 'hello world';
}

test()
    .then(res => {console.log(res)})
    .catch(err => {console.log(err.toString())})

async始終返回一個promise,函數

若是是return 一個val,那麼會經過promise.resolve(val)返回;koa2

若是拋出一個異常,async函數馬上終止執行,並經過promise.reject(err)返回;code

若是await遇到後面是一個reject狀態的promse,async函數當即終止,並返回該錯誤;對象

若是沒有顯示的return,那麼會經過promise.resolve()返回generator

###await 只能在async函數中it

就像yield必須在generator函數中同樣,一般await後面接的是一個promise對象io

調用

/*聲明一個函數*/
async function test1(args) {
    console.log(args);
    return await 'hello world';
}
/*在聲明一個函數,並在函數中調用*/
async function test2(args) {
    var test = await test1(args)
    return await test1(test);
}
/*聲明一個對象,把函數做爲它的屬性*/
var obj = {
    test3: async function(args) {
        return test2(args);
    }
}

obj.test3('i said ')
    .then(function(res) {
        console.log(res);
    })
    .catch(function(err) {
       console.log(err);
    })

是否是和普通跟函數調用同樣呢

相關文章
相關標籤/搜索