Promise /Promise.all

   Promise

1、首先来了解下什么是Promise: 专门保证多个异步任务必须顺序执行,且解决了回调地狱问题的一项特殊技术。之后只要多个异步函数必须顺序执行时,都用Promise代替回调函数。

 

function one(){
	return new Promise(function(resolve,reject){
		console.log('one起跑')
		setTimeout(function(){
			console.log("one到达终点");
			resolve();
		},4000)
	})
}

function two(){
	return new Promise(function(resolve,reject){
		console.log('two起跑');
		const num = Math.random();
		if(num<0.2){
			setTimeout(function(){
					console.log('two到达终点');
					resolve();
				},2000)
		}else{
			reject('two摔倒了,退出比赛')
		}
	})
}


function three(){
	return new Promise(function(resolve){
		console.log('three起跑');
		setTimeout(function(){
			console.log('three到达终点')
		},2000)
	})
}

one().then(two).then(three).catch(function(errMsg){console.log(errMsg)});

2、任务间传参

可以通过resolve传参,resolve(实参);

但是在resolve()中只能接受一个变量,如果传多个变量,也只有第一个变量的值可以传到下一个任务中,那么如果想传多个参数,可以通过数组或对象传参。

3、错误处理

在异步任务中,如果正常执行,通过.then()调用下一个任务, 而如果哪个任务出现了错误,则会直接到.catch(),通过函数接住返回的错误信息。

4、promise 的三个状态

(1)pending (挂起/等待)  fulfilled(成功),rejected(失败)

(2)三个状态的切换

       a.执行new Promise()时,Promise对象处于pending状态

       b. 当执行成功时,我们调用resolve()时,整个promise对象就变成fulfilled状态,就自动调用.then()中的下一项任务。

      c.当任务执行过程中出错,我们调用reject()时,整个promise对象就变成rejected状态,就不在调用.then(),而是转向调用结尾的.catch()。

Promise.all

  1、当多个异步任务同时执行,但是只有在最后一个任务执行完才做一件事情,则通过使用promise.all来实现。

 2、 Promise.all中的返回值是传到  .then()中函数的参数里,即arr中。

 3、在arr中接到返回值的顺序和 Promise.all中 异步任务的排序有关,与执行结束的先后顺序无关。

function one(){
	return new Promise(function(resolve,reject){
		console.log('one起跑')
		setTimeout(function(){
			console.log("one到达终点");
			resolve("one");
		},4000)
	})
}

function two(num){
	return new Promise(function(resolve,reject){
		console.log('two起跑');
		const num = Math.random();
			setTimeout(function(){
					console.log('two到达终点');
					resolve("two");
				},2000)
	})
}

function three(num){
	return new Promise(function(resolve){
		console.log('three起跑');
		setTimeout(function(){
			console.log('three到达终点')
			resolve("three");
		},2000)
	})
}
Promise.all([one(),two(),three()]).then(function(arr){console.log(arr)})

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值