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知识库 -> Promise和async await -> 正文阅读

[JavaScript知识库]Promise和async await

Promise基本概念

  • Promise是一个构造函数
    我们可以创建Promise的实例 const p = new Promise()
    new 出来的Promise实例对象,代表一个异步操作
  • Promise.prototype上包含一个 .then()方法
    每一次new Promise()构造函数得到的实例对象,
    都可以 通过原型链的方式访问到.then()方法,例如p.then()
  • .then()方法用来预先指定成功和失败的回调函数
    p.then( 成功的回调函数失败的回调函数)
    p.then( result => { }, error => {})
    调用.then()方法时,成功的回调函数是必选的、失败的回调函数是可选的

then-fs基本使用测试Promise

基本使用

  • 无法保证读取文件的顺序
import thenFs from 'then-fs'

thenFs.readFile('./files/1.txt', 'utf8').then(r1 =>{console.log(r1)})
thenFs.readFile('./files/2.txt', 'utf8').then(r2 =>{console.log(r2)})
thenFs.readFile('./files/3.txt', 'utf8').then(r3 =>{console.log(r3)})

在这里插入图片描述

基于Promise的链式顺序调用

  • 按顺序执行
import thenFs from 'then-fs'

thenFs.readFile('./files/1.txt', 'utf8')
.then(r1 =>{
	console.log(r1)
	return thenFs.readFile('./files/2.txt', 'utf8')
})
.then(r2 => {
	console.log(r2)
	return thenFs.readFile('./files/3.txt', 'utf8')
})
.then(r3 =>{
	console.log(r3)
})

通过.catch捕获错误

  • 可以通过catch捕捉错误
  • 不希望错误影响程序的后续执行,则可以将catch往前提
import thenFs from 'then-fs'

thenFs.readFile('./files/111.txt', 'utf8')
.catch(err =>{
	console.log(err)
})
.then(r1 =>{
	console.log(r1)
	return thenFs.readFile('./files/2.txt', 'utf8')
})
.then(r2 => {
	console.log(r2)
	return thenFs.readFile('./files/3.txt', 'utf8')
})
.then(r3 =>{
	console.log(r3)
})
.catch(err =>{
	console.log(err)
})

在这里插入图片描述

Promise.all()方法

  • 会发起并行的Promise异步操作,等所有异步操作全部结束后才会执行下一步的.then操作(等待机制)
import thenFs from 'then-fs'

const promiseArr = [
	thenFs.readFile('./files/2.txt', 'utf8'),
	thenFs.readFile('./files/1.txt', 'utf8'),
	thenFs.readFile('./files/3.txt', 'utf8')
]

Promise.all(promiseArr).then(res =>{
	console.log(res)
})
.catch(err =>{
	console.log(err)
})

在这里插入图片描述

Promise.race()方法

  • 也会发起并行的Promise操作,任何一个异步操作完成,就立即执行下一步.then赛跑机制
import thenFs from 'then-fs'

const promiseArr = [
	thenFs.readFile('./files/2.txt', 'utf8'),
	thenFs.readFile('./files/1.txt', 'utf8'),
	thenFs.readFile('./files/3.txt', 'utf8')
]

Promise.race(promiseArr).then(res =>{
	console.log(res)
})
.catch(err =>{
	console.log(err)
})

在这里插入图片描述

基于Promise封装读文件的方法

import thenFs from 'then-fs'

function getFile (fpath){
	return new Promise(function (resolve, reject){
		thenFs.readFile(fpath, 'utf8', (res, err) => {
			if(err) return reject(err)
			return resolve(res)
		})
	})
}


getFile('./files/1.txt').then(r1 => {
	console.log(r1)
}, err =>{
	console.log(err)
})

getFile('./files/11.txt').then(r1 => {
	console.log(r1)
}).catch(err => {
	console.log(err)
})

在这里插入图片描述

async和await基本使用

  • 一个方法内使用了await则方法必须被async修饰
  • 不使用async和await修饰则拿到的时实例对象
  • 使用async和await直接拿到对应的结果
import thenFs from 'then-fs'

function getAllFile (){
	const r1 = thenFs.readFile('./files/1.txt', 'utf8')
	console.log(r1)
}

getAllFile() // Promise { _40: 0, _65: 0, _55: null, _72: null }


async function getAllFile1 (){
	const r1 = await thenFs.readFile('./files/1.txt', 'utf8')
	console.log(r1) //1. 孙少聪
	const r2 = await thenFs.readFile('./files/2.txt', 'utf8')
	console.log(r2) // 2. 张高义
	const r3 = await thenFs.readFile('./files/3.txt', 'utf8')
	console.log(r3) // 3. 朱家华
}

getAllFile1()

在这里插入图片描述

async和await注意事项

  • async方法中,第一个await之前的代码会同步执行,await之后的代码会异步执行
console.log('A')
async function getAllFile1 (){
	console.log('B')
	const r1 = await thenFs.readFile('./files/1.txt', 'utf8')
	console.log(r1)
	const r2 = await thenFs.readFile('./files/2.txt', 'utf8')
	console.log(r2)
	const r3 = await thenFs.readFile('./files/3.txt', 'utf8')
	console.log(r3)
	setTimeout(function (){
		console.log('E')
	}, 1000)
	console.log('D')
}

getAllFile1()
console.log('C')

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-18 23:21:39  更:2022-06-18 23:22:44 
 
开发: 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 16:31:33-

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