Promise流程操作的细节及前后顺序的问题

Promise流程的控制

  1. 流程控制是根据定义的先后顺序,按照定义的顺序进行执行的。
		function fnResolve(promiseCB){
			return Promise.resolve(promiseCB()).then(()=>{
				console.log(3);
			});
		}
		function initPro (){
			return new Promise((resolve,reject)=>{
				setTimeout(()=>{
					console.log('initPro',1);
					fnResolve(resolve);
				},1000);
			});
		}
		function initPro2 (){
			return new Promise((resolve,reject)=>{
				setTimeout(()=>{
					console.log('initPro2',1);
					fnResolve(resolve);
				},500);
			});
		}
		function initPro3 (){
			return new Promise((resolve,reject)=>{
				setTimeout(()=>{
					console.log('initPro3',1);
					resolve();
				},1500);
			});
		}
		label test2:
		initPro().then(()=>{
			console.log(2);
		});//打印顺序,1,2,3
		label test3:
		initPro().then(async ()=>{
			console.log(2);
			await initPro3()
			console.log(4);
		});//这里看起来虽然是同步操作,但是在系统处理的时候,仍然是以异步来处理的,只是await下一行的代码,要等到initPro3执行完成之后才会执行,也就是说,这里打印出来的顺序是‘initPro2 1’,2,3,‘initPro3 1’,4

解析: 当我们需要在Promise的第一步流程结束之后需要做一些别的事情的时候,是可以通过这样的操作做一下相同的操作(如:uiloading的加载与隐藏),需要注意为什么不用finally,根据上面说的,不论你的流程是怎么写的,实际执行顺序都取决于你的定义顺序,如果finally定义在前,then定义在后,也是先执行finally再执行then.
2. 上面的代码中,把Resolve函数传入到了一个处理状态的中间函数,当Promise执行之前,已经定义好的then操作都在这个resolve中,且只有当resolve中是同步操作的时候,才适用。否则会像test3中那样,明明函数没有执行完,结果却resolve的中间函数已经执行完了。
3. 出现test3中的情况,可以百度搜索一下 主进程和协程。 原因是:当使用了await 对应的异步操作被放到了协程中,等主进程结束之后,才会继续执行协程中的内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫叶的枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值