ES6-21【async与await】

一、async与await

  1. 概念

    async:本质上就是generator生成器函数

    await:就相当于是yield产出

  2. 优势

    1. 内置的执行器是co —— 简化了异步的执行
    2. 语义化更强
    3. 更广的使用性 —— 后面可以不止是promise对象
    4. 返回值一定是promise对象(内部自动触发resolve和reject)
  3. 基本使用

    const fs = require('fs');
    const util = require('util');
    let readFile = util.promisify(fs.readFile)
    async function read() {
        try { // 生成函数与普通函数不同的是,可以通过try/catch捕获异步异常               
            let value1 = await readFile('./name.txt', 'utf-8'); // 直接拿到异步结果
            let value2 = await readFile(value1, 'utf-8');
            let value3 = await readFile(value2, 'utf-8');
            console.log('hello world');
            return value3 // 不管返回什么,最终都会变成promise对象,并自动帮你调用resolve或reject
        } catch (error) {
            console.log('91: ' + error)
        }
    }
    let promise = read(); // 返回promise对象
    promise.then((val) => {
        console.log(val);
    });
    // 正常输出:
    // hello world
    // 90
    // 异常输出:./name.text => ./nam.txt
    // 91: Error: ENOENT: no such file or directory, open 'C:\Users\21757\Desktop\ES6\nam.txt'
    // undefined
    
  4. 实现all得错误忽略

    用all方法来执行异步操作,就会直接抛出错误没法执行后面的,那么我们可以通过async和await/try-catch/set来配合实现这个功能,平常不会这么做

    let fs = require('fs');
    let util = require('util')
    let readFile = util.promisify(fs.readFile)
    async function  read(){
        let value1, value2, value3;
        let res = new Set();
        try{
    		value1 = await readFile('name.txt','utf-8');           
        }catch(err){ // 注意:这里catch不能去掉,去掉会导致无法捕获异常
            
        }
        try{     
            value2 = await readFile('number.tx','utf-8');
        }catch(err){
           
        }
        try{
            value3 = await readFile('score.txt','utf-8');
        }catch(err){
            
        }
        
        res.add(value1)
        res.add(value2)
        res.add(value3)
            
        return res;
    }
     
    read().then((val)=>{
    	console.log(val);  
    })
    // Set(3) { './number.txt', undefined, '90' } 然后再把undefined去掉就可以了
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值