promise简单例子

promise的一个简单例子

  1. 代码展示
// 一般都是微任务先执行,然后再执行宏任务,但是在promise里面的宏任务函数,必须先执行完,才能往下执行
Promise.resolve('foo')
    .then(function (string) {
    	// 微任务1
        console.log(1);
        return new Promise(function (resolve, reject) {
            setTimeout(function () {
            	// 宏任务(这个宏任务会提前执行)
                string += 'bar';
                resolve(string);
            }, 1);
        });
    })
    .then(function (string) {
    	// 微任务2
        console.log(2);
        setTimeout(function () {
        	// 宏任务
            string += 'baz';
            console.log('2', string);
        }, 1)
        return string;
    })
    .then(function (string) {
    	// 微任务3
        console.log(3);
        console.log('3', string);
    });
  1. 打印输出:1,2,3,3 foobar, 2 foobarbaz
  2. 逻辑梳理:
    1. 里面出现了3个then函数,在主执行栈执行过程中,会把then里面的函数作为微任务逐次添加到微任务队列中。
      如下 [ 微任务1, 微任务2, 微任务3]
    2. 在主执行栈执行完成后,逐次执行微任务队列中的每一个任务。
      1. 这时候首先会输出 1,然后生成一个实例化 promise 实例,当做结果返回。在promise中,如果返回一个promise对象,后边的then函数都是依赖于次对象的。所以后边的then都是依赖第一个微任务返回的promise
      2. 当第一个返回promise后,微任务2开始执行,此时输出 2,然后生成一个setTimeout宏任务,返回结果
      3. 接受到微任务2的结果后,微任务3开始执行,此时输出 3,然后输出 3 foobar
    3. 当微任务执行完成后,此时执行宏任务队列,这里面只有一个,就是当时微任务2执行时添加的setTimeout,这是输出2 foobarbaz
  3. 注意知识点:一般都是微任务先执行,然后再执行宏任务,但是在promise里面的宏任务函数,必须先执行完,才能往下执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值