Promise用法

Promise 是抽象的异步处理对象,Promise最初被提出是在 E语言中, 它是基于并列/并行处理设计的一种编程语言。Javascript 在 ES6 之后也开始支持 Promise 特性。

Javascript可以通过回调处理异步问题,但处理起来比较麻烦,尤其存在嵌套调用问题。

Promise对象有三个状态
Pending:待处理
Fulfilled:已成功处理
Rejected:处理失败

新创建的Promise对象是Pending状态,执行异步操作过程中一直处在Pending状态,当异步操作成功完成Promise对象状态改为Fulfilled,当异步操作失败时Promise对象状态改为Rejected。

创建Promise需要初始化两个参数函数的其中一个或全部,这个函数分别是resolve和reject,
当异步操作成功完成Promise对象状态改为Fulfilled,执行resolve。
当异步操作失败时Promise对象状态改为Rejected,执行reject。

定义Promise的方法

一、 let p = new Promise((resolve,reject)=>{
resolve(‘成功执行’);

	})
	p.then((value)=>{console.log('resolve='+value)});

	下面写法也可以
	let p2 = new Promise(function(ok,err){
		err('执行失败')
		
	})
	p2.catch((value)=>{console.log('reject='+value)});
<html>
	<title>Test Promise</title>
	<head>
	</head>
	<body>
		<script>
		let p = new Promise((resolve,reject)=>{
			resolve('成功执行');
			
		})
		p.then((value)=>{console.log('resolve='+value)});

		let p2 = new Promise(function(ok,err){
			err('执行失败')
			
		})
		p2.catch((value)=>{console.log('reject='+value)});

		</script>

		<div id="testdiv"></div>
	</body>
</html>

二、使用静态方法resolve或reject
let p = Promise.resolve(‘OK’)
p.then((value)=>{console.log(‘resolve=’+value)});

	let p2 = Promise.reject('执行失败')
	p2.catch((value)=>{console.log('reject='+value)});
<html>
	<title>Test Promise</title>
	<head>
	</head>
	<body>
		<script>
		let p = Promise.resolve('OK')
		p.then((value)=>{console.log('resolve='+value)});

		let p2 = Promise.reject('执行失败')
		p2.catch((value)=>{console.log('reject='+value)});

		</script>

		<div id="testdiv"></div>
	</body>
</html>

Promise执行顺序

<html>
	<title>Test Promise</title>
	<head>
	</head>
	<body>
		<script>
		let p = new Promise((resolve,reject)=>
		{
			console.log('run here 1');
			resolve('run here 2');
		});
		p.then((v)=>{console.log(v)});
		console.log('run here 3');

		</script>

		<div id="testdiv"></div>
	</body>
</html>

在这里插入图片描述
异步执行操作在最后输出,所以run here 2最后输出

Promise All操作必须全部Promise执行完成

Promise.add([p1,p2,p3])

<html>
	<title>Test Promise</title>
	<head>
	</head>
	<body>
		<script>
		let p1 = new Promise((resolve,reject)=>
		{
			resolve('run promise 1');
		});
		let p2 = new Promise((resolve,reject)=>
		{
			resolve('run promise 2');
		});
		let p3 = new Promise((resolve,reject)=>
		{
			resolve('run promise 3');
		});

		let p4 = Promise.all([p1,p2,p3]);
		p4.then((v)=>{console.log(v)});

		</script>

		<div id="testdiv"></div>
	</body>
</html>

在这里插入图片描述

Promise Race操作只有一个Promise执行完成即可

Promise.race([p1,p2,p3])

<html>
	<title>Test Promise</title>
	<head>
	</head>
	<body>
		<script>
		let p1 = new Promise((resolve,reject)=>
		{
			resolve('run promise 1');
		});
		let p2 = new Promise((resolve,reject)=>
		{
			resolve('run promise 2');
		});
		let p3 = new Promise((resolve,reject)=>
		{
			resolve('run promise 3');
		});

		let p4 = Promise.race([p1,p2,p3]);
		p4.then((v)=>{console.log(v)});

		</script>

		<div id="testdiv"></div>
	</body>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值