资讯专栏INFORMATION COLUMN

一道有意思并对你有帮助的Promise题

yy13818512006 / 1244人阅读

摘要:一道有意思的题以下我的学习分析心路历程,以及我自己又多加了几道菜希望对你有帮助先上菜分析第一道菜第一次看到我做错了,答案是我的疑惑就是为什么在和之间,很奇怪。说明什么呢我对的内部实现还不了解,那只能去看源码了。

一道有意思的题

以下我的学习分析心路历程,以及我自己又多加了几道菜;希望对你有帮助

先上菜
new Promise((resolve, reject) => {
    console.log("promise1");
    resolve();
}).then(() => {
    console.log("then11");
    new Promise((resolve, reject) => {
        console.log("promise2");
        resolve();
    }).then(() => {
        console.log("then21");
    }).then(() => {
        console.log("then23");
    });
}).then(() => {
    console.log("then12");
});
分析第一道菜

第一次看到我做错了,答案是

promise1
then11
promise2
then21
then12
then23

我的疑惑就是then12为什么在then21then23之间,很奇怪。说明什么呢?我对Promise的内部实现还不了解,那只能去看源码了。在学习过程中,自己也尝试改变了几处,也贴上来吧,大家看看

看完后我的理解

先分析下面代码

new Promise((resolve, reject) => {
    console.log("promise1");
    resolve();
})

第一步console.log("promise1"),这是第一个promise实例

第二步resolve(),他是一个异步,放入异步队列中,取名异步1

第三步this.status 状态是pending

接着执行下面代码

.then(() => {
    console.log("then11");
    new Promise((resolve, reject) => {
        console.log("promise2");
        resolve();
    }).then(() => {
        console.log("then21");
    }).then(() => {
        console.log("then23");
    });
})

因为状态是pending,将then方法回调函数加入执行队列(一个数组)等待执行(专用来放then方法的数组),该then方法取名方法1

重点接着执行什么?

并不是执行.then(() => {console.log(then12)}),要记住的是then的参数方法执行时机是当前(属于自己的)promise状态改变才会执行,谁改变resolve或者rejectd的执行,那么这里then的promise哪里来,就是上面的方法1中来看他的return值

所以开始执行异步1(我都有取名的,看

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109604.html

相关文章

  • 「今日头条」前端面试和思路解析

    摘要:一篇文章和一道面试题最近,有篇名为张图帮你一步步看清和的执行顺序的文章引起了我的关注。作者用一道年今日头条的前端面试题为引子,分步讲解了最终结果的执行原因。从字面意思理解,让我们等等。当前的最新版本,在这里的执行顺序上,的确存在有问题。 一篇文章和一道面试题 最近,有篇名为 《8张图帮你一步步看清 async/await 和 promise 的执行顺序》 的文章引起了我的关注。 作者用...

    宠来也 评论0 收藏0
  • JavaScript系列——JavaScript同步、异步、回调执行顺序之经典闭包setTimeou

    摘要:同步异步回调傻傻分不清楚。分割线上面主要讲了同步和回调执行顺序的问题,接着我就举一个包含同步异步回调的例子。同步优先回调内部有个,第二个是一个回调回调垫底。异步也,轮到回调的孩子们回调,出来执行了。 同步、异步、回调?傻傻分不清楚。 大家注意了,教大家一道口诀: 同步优先、异步靠边、回调垫底(读起来不顺) 用公式表达就是: 同步 => 异步 => 回调 这口诀有什么用呢?用来对付面试的...

    lewif 评论0 收藏0
  • JavaScript系列——JavaScript同步、异步、回调执行顺序之经典闭包setTimeou

    摘要:同步异步回调傻傻分不清楚。分割线上面主要讲了同步和回调执行顺序的问题,接着我就举一个包含同步异步回调的例子。同步优先回调内部有个,第二个是一个回调回调垫底。异步也,轮到回调的孩子们回调,出来执行了。 同步、异步、回调?傻傻分不清楚。 大家注意了,教大家一道口诀: 同步优先、异步靠边、回调垫底(读起来不顺) 用公式表达就是: 同步 => 异步 => 回调 这口诀有什么用呢?用来对付面试的...

    rockswang 评论0 收藏0
  • 深入浅出JavaScript运行机制

    摘要:主线程从任务队列中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为事件循环。上面也提到,在到达指定时间时,定时器就会将相应回调函数插入任务队列尾部。这就是定时器功能。关于定时器的重要补充定时器包括与两个方法。 一、引子 本文介绍JavaScript运行机制,这一部分比较抽象,我们先从一道面试题入手: console.log(1); setTimeout(function()...

    mochixuan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<