ES6入门---第三单元 模块三:async、await

async function fn(){ //表示异步:这个函数里面有异步任务

let result = await xxx //表示后面结果需要等待

}

读取文件里数据实例:

javascript 复制代码
const fs = require('fs');

//简单封装  fs封装成一个promise
const readFile = function (fileName){
    return new Promise((resolve, reject) =>{
        fs.readFile(fileName, (err, data) =>{
            if(err) reject(err);
            resolve(data);
        });
    });
}


//async
async function fn(){
    let f1 = await readFile('data/a.txt');
    console.log(f1.toString());
    let f2 = await readFile('data/b.txt');
    console.log(f2.toString());
    let f3 = await readFile('data/c.txt');
    console.log(f3.toString());
    
}
fn();
javascript 复制代码
async function fn(){
            throw new Error('Error出错了');//新建一个错误
        }

        fn().then(res=>{
            console.log(res);
        }, err =>{//别忘了设计错误
            console.log(err);
        })

也可以为catch版

javascript 复制代码
 fn().then(res=>{
            console.log(res);
        }).catch(err=>{
            console.log(err);
        })

async特点:

  1. await只能放到async函数中

  2. 相比genrator语义化更强

  3. await后面可以是promise对象,也可以数字、字符串、布尔

  4. async函数返回是一个promise对象

  5. 只要await语句后面Promise状态变成 reject, 那么执行完reject后整个async函数会中断执行

如:

javascript 复制代码
 async function fn(){
            await Promise.reject('出现问题了');
            let a = await Promise.resolve('success');
            console.log(a);
        }

        fn().then(res=>{
            console.log(res);
        }).catch(err=>{
            console.log(err);
        })

如何解决async函数中抛出错误,影响后续代码:

a). 最好用此法

javascript 复制代码
try{

		}catch(e){
			
		}

要把涉及网络的代码全包涵在try里以防其中之一出错

javascript 复制代码
try{
		let f1 = await readFile('data/a.txt');
		let f3 = await readFile('data/c.txt');
		let f2 = await readFile('data/b.txt');
	}catch(e){}

b). promise本身catch

javascript 复制代码
  async function fn(){
            await Promise.reject('出现问题了').catch(err=>{
                console.log(err);
            });
            
            let a = await Promise.resolve('success');
            console.log(a);
        }

        fn().then(res=>{
            console.log(res);
        });
相关推荐
Mintopia1 分钟前
JavaScript 里的光影魔术师:光线投射
前端·javascript·计算机图形学
呆呆的心25 分钟前
深入探索 JavaScript 字符串处理:从基础到高阶 🚀
前端·javascript
zhangbao90s30 分钟前
react-window:学习如何高效地渲染大型列表
前端·javascript·react.js
x2931 分钟前
全栈视角重塑 Electron 应用开发体验:Nest 架构、多窗口、IPC 通信全解耦
前端
LYP_032039 分钟前
uniapp 实战demo
前端·javascript·uni-app
lyc2333331 小时前
鸿蒙界面镜像测试:让RTL布局「正反都好看」
前端
lyc2333331 小时前
鸿蒙IPCKit:当远端进程「消失」时,如何优雅地「收拾残局」?
前端
我怎么能这么帅气1 小时前
Node.js 多核战争:child_process vs cluster vs worker_threads 终极对决
前端·后端·node.js
市民中心的蟋蟀1 小时前
第九章 案例 3 - Valtio 【下】
前端·javascript·react.js
麦当_1 小时前
Vite 项目 Icon 解决方案
前端·javascript·vite