一.什么是Promise Promise是异步编程的一种解决方案
那什么时候我们会来处理异步事件呢?
- 一种很常见的场景就是网络请求
- 我们封装一个网络请求的函数,但网络请求往往不能立即拿到结果,因此我们会开启一个异步编程,它不会影响页面的继续加载
- 而我们往往会传入另外一个函数,在数据请求成功时,将数据通过此函数回调。
- 所以如果只是一个简单的网络请求,那么这种方案不会带来太多麻烦
- 但是当网络请求非常复杂时,就会出现回调地狱(多层回调),代码难看且不容易维护
- 而Promise可以以一种优雅的方式解决回调地狱的问题
在执行传入的回调函数时,会传入两个参数resolve和reject,而它们本身又是函数
基本使用过程:
new Promise((resolve,reject) => {
setTimeOut(() => { // 一个网络请求
//成功时调用resolve
resolve('Hello world')
//失败时调用reject
reject('error message')
},1000)
}).then((data) = > { // 处理代码,与resolve对应
console.log(data)
}).catch((err) => { // 处理代码,与reject对应
console.log(err)
})
【数据库|ES6的Promise链式异步编程方法】Promise是一个链式编程,它将网络请求和处理代码分离
三.Promise三种状态 首先,当我们开发中有异步操作时,就可以给异步操作包装一个Promise
异步操作之后会出现三种状态
- pending: 等待状态,比如正在进行网络请求,或者定时器没有到时间
- fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()
- reject: 拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()
new Promise((resolve,reject) => {
setTimeOut(() => {
resolve('Hello vuejs')
reject('error message')
},1000)
}).then(data => {
console.log(data)
},err => {
console.log(err)
})
五.Promise的链式调用 将每一步处理都放在一个新的Promise里
设计案例:
1.提出网络请求,返回aaa
2.处理 aaa+‘111’
new Promise((resolve,reject) => {
setTimeOut(() => {
resolve('aaa')
},1000)
}).then(res => {
console.log(res,'每一层是10层代码处理')
// 对结果进行第一次处理
return new Promise((resolve) => {
resolve(res+'111')
})
}).then(res => {
console.log(res,'第二层的10层代码回调')
})
文章图片
可以简写为:
return Promise.resolve(res+'111')
,继而再次简化为return res+'111'
两种方法而对于reject也可以简写为:
return Promise.reject('error')
,仅一种简写方法六.Promise的all使用方法 如果一个异步操作,需要两个以上的请求才能完成,此时我们考虑promise.all方法
promise.all([ // promise.all后面是数组
new Promise((resolve,reject) => {
setTimeOut(() => {
resolve(data1)
},2000)
}),
new Promise((resolve,reject) => {
setTimeOut(() => {
resolve(data2)
},1000)
})
]).then(results => { //results为数组
console.log(results)
})
推荐阅读
- Vue.js|十二、Promise的学习笔记(Promise的基本使用、链式编程、all())
- 技术|(面试感悟)一名3年工作经验的程序员应该具备的技能 ...
- Java|JDBC (Java DataBase Connectivity )的基本使用
- MySQL学习笔记|MySQL8.0学习记录16 - 存储过程与函数对比
- #|4-MySQL原理-SQL执行原理
- linux|MySQL数据库增删改查(基础操作命令详解)
- mysql优化|MySQL到底怎么优化?
- 前端与Python|Pandas 函数方法汇总一览查询(持续补充改进)
- 图数据库|如何从零到一构建一个企业股权图谱系统