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);
        });
相关推荐
小爱同学_23 分钟前
一次面试让我重新认识了 Cursor
前端·面试·程序员
golang学习记31 分钟前
AI 乱写代码?不是模型不行,而是你的 VS Code 缺了 Context!MCP 才是破局关键
前端
星光不问赶路人38 分钟前
Vite 中的 import.meta.glob vs 动态导入:该用哪个?
前端·vite
疯狂踩坑人38 分钟前
【万字长文】让面试没有难撕的JS基础题
javascript·面试
z_y_j2299704381 小时前
服务器中使用Docker部署前端项目
服务器·前端·docker·容器
极客小俊1 小时前
【浅谈javascript禁术】 eval函数暗藏玄机?
javascript
迪丽热爱1 小时前
解决【npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。】问题
前端·npm·node.js
数字冰雹2 小时前
图观 流渲染场景服务器
服务器·前端·数据库·数据可视化
李明卫杭州2 小时前
详细讲解js中的ResizeObserver
前端·javascript
千叶寻-2 小时前
package.json详解
前端·vue.js·react.js·webpack·前端框架·node.js·json