async/await

ES7:async/await

关键字

  • async 和 await 是 ES2017 中提出来的。

  • 异步操作是 JavaScript 编程的麻烦事,麻烦到一直有人提出各种各样的方案,试图解决这个问题。从最早的回调函数,到 Promise 对象,每次都有所改进,但又让人觉得不彻底。它们都有额外的复杂性,都需要理解抽象的底层运行机制。

  • 不就是读取一个文件吗,干嘛要搞得这么复杂?async 函数就是隧道尽头的亮光,很多人认为它是异步操作的终极解决方案;

  • ES2017提供了async和await关键字:

    • async 用于修饰一个 function,表示该函数里面有异步操作(Promise的调用)
    • await 需要定义在async修饰函数的内部,await后面跟的一般都是一个函数(函数里面包含有Promise)的调用 【await后面:promise实例化对象】
    • 如果有哪一个await操作出错了,会中断async函数的执行

使用

const fs = require('fs');

// 将异步读取文件的代码封装
function myReadFile (path) {
    return new Promise((resolve, reject) => {
        fs.readFile(path, 'utf-8', (err, data) => {
            err ? reject(err) : resolve(data.length);
        });
    });
}

// 1.async后的函数表示里面有异步操作
async function abc () {
    // 2.等待这个异步操作返回结果!我们现在写的异步,但是完全是同步的方式写异步!!
    let a = await myReadFile('./a.txt');
    let b = await myReadFile('./b.txt');
    let c = await myReadFile('./c.txt');
    console.log(b);
    console.log(a);
    console.log(c);
}

abc();
await 只会等待 promise 成功的结果, 如果失败了会报错, 需要 try catch
async function abc () {
    try {
        let a = await myReadFile('./a.txt');
        let b = await myReadFile('./b.txt');
        let c = await myReadFile('./c.txt');
        console.log(b);
        console.log(a);
        console.log(c);
    }
    catch (err) {
        console.log('读取文件失败了', err)
    }
}

abc();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值