JavaScript-Promise总结

参考:小一辈无产阶级码农
地址:https://www.jb51.net/article/139825.htm

1.定义:Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。

Promise有三个状态:Fulfilled:成功,Rejected:失败,Pending:待解决。
速记就是成功失败进行中。
状态一旦改变就不会再改变。
状态不受外界影响。抛出错误也不会影响外界。

基本用法:

	let p1 = new Promise((resolve, reject) => {
		resolve(2)
	}) 
	p1.then(value => console.log(value + 1))//输出3

解决地狱回调:(同时将上一次执行的数传递给下一个then)

	function A(value) {
		console.log(value)
		return "from A"
	}
	function B(value) {
		console.log(value)
		return "from B"
	}
	function C(value) {
		console.log(value)
		return "from C"
	}
	let p1 = new Promise((resolve, reject) => {
		resolve("开始")
	})
	p1.then(value => {
		console.log(value)
		return "传给下一个"
	})
	.then(A)
	.then(B)
	.then(C)
	.then(value => console.log(value))
	.catch(err => console.log(err))

输出:
请添加图片描述

2.相关Promise方法

(1)Promise.all()
定义:Promise.all方法用于将多个 Promise 实例,用来处理组合 Promise 的逻辑操作。
只有所有的Promise返回成功状态fulfilled才会为成功状态,否则为失败状态rejected。
例子:(两个任务并行执行)

	let p1 = new Promise((resolve, reject) => {
		setTimeout(resolve, 200, "promise1")
	})
	let p2 = new Promise((resolve, reject) => {
		setTimeout(resolve, 300, "promise2")
	})
	Promise.all([p1,p2]).then(
		result => console.log(result)//输出['promise1', 'primise2']
	)

(2)Promise.race()
定义:区别于Promise.all(),只要有任意一个完成,就算完成。

例子:

	let p1 = new Promise((resolve, reject) => {
		// resolve("promise1")
		setTimeout(resolve, 300, "promise1")
	})
	let p2 = new Promise((resolve, reject) => {
		// resolve("promise2")
		setTimeout(resolve, 200, "promise2")
	})
	Promise.race([p1,p2]).then(
		result => console.log(result)//输出promise2
	)

(3)Promise.reject()
定义及特性: Promise.reject()方法的参数,会原封不动地作为reject的理由,变成后续方法的参数。

例子1:

const p = new Promise((resolve, reject) => reject('error'))
p.then(null, result => console.log(result));//输出error

例子2:(等同于1)

const p = Promise.reject('error');
p.then(null, result => console.log(result));//输出error
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值