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);
    })

是否是和普通跟函数调用同样呢

相关文章
相关标签/搜索