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);
        });
相关推荐
半个落月5 小时前
LangSmith 全链路观测(下):用 Dataset 与 LLM Judge 量化评估 RA
javascript·langchain
半个落月5 小时前
LangSmith 全链路观测(上):用 LangGraph 与 Milvus 构建可追踪的 RAG 客服
javascript·langchain
Java后端的Ai之路6 小时前
06-React-Props
前端·react.js·前端框架
半个落月6 小时前
LangChain.js Agent 中间件实战:生命周期、动态工具与文件权限
javascript·langchain
Flynt6 小时前
开源"间谍卫星"说数据全是真的,我把它的免key数据源挨个试了一遍
前端·开源·数据可视化
Csvn7 小时前
渲染管线
前端
程序员大阳7 小时前
副队长CSS教程(33)–圆角与透明
前端·css·透明·圆角
志尊宝7 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
鬼手点金8 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
柳杉8 小时前
借助 Codex 和可视化工作流,从调研到完整实现,3D 大屏竟然可以这么简单
前端·ai编程·数据可视化