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

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")
})
/*
运行结果:
promise1
then1-1
promise2
then2-1
then1-2
then2-2
*/
同样的,我的问题也就是:第一个外层的then的状态是什么情况下,第二个外层的then才会调用呢?
Cats萌萌
浏览 364回答 2
2回答

慕神8447489

第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.})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript