异步编程之async函数

ES2017(即ES8)中引入了asyncawait两个关键字,专用于编写异步逻辑。异步函数实际上是对Generator函数和Promise进行封装的一个语法糖,写法可读性非常强。

async异步函数

Generator函数章节中,我们使用生成器函数,能够将传统的嵌套异步代码转换为顺序代码,但我们依然需要循环调用生成器函数的next(),还不是十分方便。使用async函数,能够进一步简化代码。

这里,我们将Generator函数章节中的代码改为async函数写法(略去funcA、funcB、funcC定义部分):

async function asyncFunc() {
    const resultA = await funcA();
    console.log('rsp', resultA);
    const resultB = await funcB();
    console.log('rsp', resultB);
    const resultC = await funcC();
    console.log('rsp', resultC);
}

asyncFunc();

这个就非常强了!我们甚至读取返回值的逻辑也不需要放到then()中了,异步处理逻辑,全部都是顺序的。

注意:上面我们async函数中读取的resultA等,都是Promise执行成功的返回值,那么如何在async函数中读取Promise执行失败的值呢?这可以使用try...catch...来实现。

async函数返回值

async函数返回值也是一个Promise对象,因此我们可以直接使用then()等函数进行后续处理,async函数中,return的内容就是Promise对象then()函数的参数。

async function getTeacherByStudent(student) {
    // 异步调用1
    const classRoom = await getClassRoom(student);
    // 异步调用2
    const teacher = await getTeacherByClassRoom(classRoom);
    return teacher;
}

getTeacherByStudent('Tom').then((resp) => {
    // 一些操作
});
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。