Promise.resolve() 链式调用中,输出顺序是怎样的?
promise 输出顺序面试题
问题
这是在某网站上看到的面试题:
promise.resolve().then(() => { console.log('start'); return promise.resolve('end'); }).then(res => { console.log(res); }); promise.resolve().then(() => { console.log(1); }).then(() => { console.log(2); }).then(() => { console.log(3); }).then(() => { console.log(4); }).then(() => { console.log(5); }).then(() => { console.log(6); });
打印输出的顺序是什么?
答案
不同的浏览器和 ide 中,输出顺序可能有所不同。但是,在大多数情况下,输出顺序为:
start 1 2 3 end 4 5 6
原因
promise.resolve() 返回的结果是一个 promise 对象,可以通过 .then() 方法添加回调函数。当一个回调函数执行时,会将一个微任务添加到微任务队列中。
在第一个 promise 中,.then() 回调函数中返回了一个 promise 对象。这会导致:
因此,在解析第一个 promise 之前,第二个 promise 的第一个回调函数已经添加到了微任务队列中。当两个 promise 都解析完成后,微任务队列中的微任务按添加顺序依次执行。
在第二个 promise 中,.then() 回调函数是链式调用的。每个回调函数都添加了一个微任务到微任务队列中。因此,当它们解析完成后,微任务队列中的微任务按添加顺序执行。
以上就是Promise.resolve() 链式调用中,输出顺序是怎样的?的详细内容,更多请关注硕下网其它相关文章!