为了账号安全,请及时绑定邮箱和手机立即绑定

有大佬遇到过这个问题吗:promise的链式调用顺序感激不尽

有大佬遇到过这个问题吗:promise的链式调用顺序感激不尽

Cats萌萌 2019-09-19 11:55:14
promise的then的链式调用顺序不是按照先后顺序的吗?为什么以下代码的顺序有点不一样?newPromise((resolve,reject)=>{console.log("promise1")resolve()}).then(()=>{console.log("then1-1")newPromise((resolve,reject)=>{console.log("promise2")resolve()}).then(()=>{console.log("then2-1")}).then(()=>{console.log("then2-2")})}).then(()=>{console.log("then1-2")})/*运行结果:promise1then1-1promise2then2-1then1-2then2-2*/同样的,我的问题也就是:第一个外层的then的状态是什么情况下,第二个外层的then才会调用呢?
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

第1行的Promise被创建,它的构造函数里面的函数会立即执行,此时输出promise1
第2行的resolve方法被调用,因此会接着执行第4行的then里面的内容,此时输出then1-1;第14行的then里面的内容会进入任务队列,等待执行。
第6行的Promise被创建;同理,此时输出promise2
第8行的resolve方法被调用,因此会接着执行第9行的then里面的内容,此时输出then2-1;第12行的then里面的内容会进入任务队列,等待执行。
此时同等级别的任务队列里面有两个任务,分别是步骤2里面提到的第14行的then回调和步骤4提到的第12行的then回调,根据先后顺序,分别先后执行输出then1-2、then2-2。
1.newPromise((resolve,reject)=>{
2.console.log("promise1")
3.resolve()
4.}).then(()=>{
5.console.log("then1-1")
6.newPromise((resolve,reject)=>{
7.console.log("promise2")
8.resolve()
9.}).then(()=>{
10.console.log("then2-1")
11.}).then(()=>{
12.console.log("then2-2")
13.});
14.}).then(()=>{
15.console.log("then1-2")
16.})
                            
查看完整回答
反对 回复 2019-09-19
  • 2 回答
  • 0 关注
  • 363 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信