Promise (ES6学习笔记)

什么是Promise

Promise对象用于表示一个异步操作的最终状态(完成或失败)以及其返回值 ——MDN

使用Promise

Promise的三种状态

Promise状态的改变不可逆 一但决议就不能修改
进行中 —— 成功
pending —— fulfilled
进行中 —— 失败
pending —— rejected

then

成功时执行 resolve

function f() {
	return new Promise(resolve => {
	setTimeout(function(){
		resolve();
	},1000)
	})
}
f()
.then(function(){
	console.log(1);
	return f();
})
.then(function(){
	console.log(2);
})

输出结果:1s 之后输出 1,再1s之后输出 2

then方法与回调函数相比层级更清晰

什么叫回调函数?在知乎上看到一个回答觉得很形象这里引用下:

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。
作者:常溪玲 链接:https://www.zhihu.com/question/19801131/answer/13005983
来源:知乎

Promise的信任问题 Promise改善了信任上的一些问题 如:
resolve();
resolve();
只会被执行一次
作为初学者其实不大懂的什么叫信任问题,这里老师说了,就做个笔记记录下,有机会再完善
在这里插入图片描述
信任问题可参考

https://blog.csdn.net/qq_40653782/article/details/103375370

Promise 处理错误

失败时执行reject

function f(val) {
	return new Promise((resolve,reject) => {
	if(val) {
	resolve({name: '小明'});//只能传递一个参数
	}else {
		reject(404);
	}
})
}
f(false)
.then(data => {
	console.log(data);
},e => {
	console.log(e);
})

catch()

使用catch 方法可以捕获错误

function f(val) {
	return new Promise((resolve,reject) => {
	if(val) {
	resolve({name: '小明'});//只能传递一个参数
	}else {
		reject(404);
	}
})
}
f(true)
.then(data => {
	console.log(data);
	return f(false)
})
.catch(e => {
	console.log(e)
})

finally()

finally 是每个Promise实例都拥有的
不论成功还是失败,finally 中的内容一定会执行

f(true)
.then(data => {
	console.log(data);
	return f(false)
})
.catch(e => {
	console.log(e)
})
.finally(() => {
console.log('我一定会被输出')})

Promise.all() 与 Promise.race()

Promise.all() 方法

Promise.all 方法可以把多个promise实例 包装成一个新的promise实例
Promise.all([promise1,promise2]):Promise
如果参数中的Promise对象均决议为成功
则Promise.all()决议为成功,并将值返回一个数组参数中
如参数中的Promise对象有一个决议为失败,
则Promise.all()决议为失败,并返回失败的值为参数
如果Promise.all([])决议的是空数组,则立即返回成功

Promise.race()方法

Promise.race([[promise1,promise2]):Promise
race意思是竞赛
只要其中一个promise实例决议为成功或者失败,就返回
成功或失败
返回最先决议的promise 实例结果
如果Promise.race([])决议的是空数组,则一直挂着

Promise.resolve() 与 Promise.rejcet()

Promise.resolve() 与 Promise.rejcet()常用来生成已经被决议为失败或者成功的promise实例

Promise.resolve()

resolve() 传值:
1、传递一个普通的值
如果接受的是普通的值,就会立即决议为成功,并填充这个值

let p1 = new Promise(resolve = >{
	resolve('成功')
})
//p1 等价于 p2 
let p2 = Promise.resolve('成功')

2、传递一个promise实例
如果接受的是一个promise实例,则返回这个promise实例

let p1 = new Promise(resolve = >{
	resolve('成功')
})
let p2 = Promise.resolve(p1)
p2.then(data => void console.log(data))
//p2 === p1 

3、传递一个thenable

如果接受的是thenable 对象,则会把他包装成Promise对象,并立即执行该对象的then方法在这里插入图片描述

Promise.rejcet()

决议为失败时reject 会产生一个决议失败的promise 并直接传递值
在这里插入图片描述

resolve() 与reject()方法

1、如果接受的是普通的值,就会立即决议为成功,并填充这个值
2、如果接受的是一个promise实例,则返回这个promise神似李
3、如果接受的是thenable 对象,则会把他包装成Promise对象,并立即执行该对象的then方法
4、reject 会产生一个决议失败的promise 并直接传递值

个人学习笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PromiseES6新增的构造器,用来优化异步代码的写法。它代表了一个承诺,承诺在一段时间后返回最终的结果。在ES6中,我们可以使用Promise来处理异步操作,以避免回调地狱的问题。 Promise提供了很多方法,其中包括Promise.all()方法。这个方法接收一个包含多个Promise对象的数组作为参数,并返回一个新的Promise对象。只有当所有的Promise对象都成功时,Promise.all()才会成功;只要其中一个Promise对象失败了,Promise.all()就会直接失败。成功时,返回的结果是所有Promise对象的结果组成的数组;失败时,返回的结果是失败的Promise对象的结果。 在学习Promise的格式定义时,可以使用箭头函数或普通声明。例如,可以使用箭头函数来定义一个Promise对象p1: ```javascript let p1 = new Promise((resolve, reject) => { // 执行异步操作 }); ``` 也可以使用普通声明的方式来定义一个Promise对象p2: ```javascript let p2 = new Promise(function (resolve, reject) { // 执行异步操作 }); ``` 通过使用Promise构造器和定义异步操作的方式,我们可以更简洁和清晰地处理异步任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ES6 Promise(承诺)看这一篇就够了](https://blog.csdn.net/m0_46846526/article/details/119345337)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ES6必学必会新特性之Promise介绍及使用](https://blog.csdn.net/m0_62346839/article/details/126569071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值