Promise基本使用

Promise 状态

状态的特点

Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。除了异步操作的结果,任何其他操作都无法改变这个状态。

Promise 对象只有:从 pending 变为 fulfilled 和从 pending 变为 rejected 的状态改变。只要处于 fulfilled 和 rejected ,状态就不会再变了即 resolved(已定型)。

then 方法

then 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。

new Promise((resolve,reject) => {  
    resolve('success3'); 
}).then((result) => {  //执行成功时的回调
	console.log(result)
}, (err) => {  //执行失败时的回调
	console.log(err)
})

也可以用catch方法捕获异常

new Promise((resolve,reject) => {  
    resolve('success3'); 
}).then((res) => {  
	console.log(res);
}).catch((err) => {
	console.log(err);
})

Promise的链式调用

主要的思想是在then方法里返回Promise对象,以下三种方式都是用于调用reslove

new Promise((resolve,reject) => {  
    resolve('success3'); 
}).then((res) => {  
	console.log(res);
	// 第一种方式
	return new Promise((reslove) => { //不使用reject方法的时候可以不用传reject
		reslove(res + '123');
	})
}).then((res) => {
	console.log(res);
	//第二种方式
	return Promise.reslove(res + '222')
}).then((res) => {
	console.log(res);
	//第三种方式
	return res + '333'
})

reject的使用和resolve大体相同,可通过new Promise和Promise.reject调用,除了这两种方式,还可以通过throw抛出异常

new Promise((resolve,reject) => {  
    resolve('success3'); 
}).then((res) => {
	console.log(res);
	// return Promise.reject('error message')
	throw 'error message'
}).catch((err) => {
	console.log(err);
})

Promise.all()

Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个Promise的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});
// expected output: Array [3, 42, "foo"]

Promise.allSettled()

该Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。

当您有多个彼此不依赖的异步任务成功完成时,或者您总是想知道每个promise的结果时,通常使用它。

相比之下,Promise.all() 更适合彼此相互依赖或者在其中任何一个reject时立即结束。

const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'foo'));
const promises = [promise1, promise2];

Promise.allSettled(promises).
  then((results) => results.forEach((result) => console.log(result.status)));

// expected output:
// "fulfilled"
// "rejected"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值