
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 中,输出顺序可能有所不同。但是,在大多数情况下,输出顺序为:
start123end456
原因
promise.resolve() 返回的结果是一个 promise 对象,可以通过 .then() 方法添加回调函数。当一个回调函数执行时,会将一个微任务添加到微任务队列中。
在第一个 promise 中,.then() 回调函数中返回了一个 promise 对象。这会导致:
微任务队列中添加一个微任务来解析返回的 promise。微任务队列中添加一个微任务来调用第二个 .then() 回调函数。
因此,在解析第一个 promise 之前,第二个 promise 的第一个回调函数已经添加到了微任务队列中。当两个 promise 都解析完成后,微任务队列中的微任务按添加顺序依次执行。
在第二个 promise 中,.then() 回调函数是链式调用的。每个回调函数都添加了一个微任务到微任务队列中。因此,当它们解析完成后,微任务队列中的微任务按添加顺序执行。
以上就是Promise.resolve() 链式调用中,输出顺序是怎样的?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1497504.html
微信扫一扫
支付宝扫一扫