IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ES6-21【async与await】 -> 正文阅读

[JavaScript知识库]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去掉就可以了
    
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:21:48  更:2022-05-11 16:22:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:13:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码