Promise-以往的异步编程模式

要理解这个 double 函数在调度异步操作后为什么会立即退出,我们可以一步一步拆解它的执行流程。

首先,看一下 double 函数的定义:

function double(value) {
  setTimeout(() => setTimeout(console.log, 0, value * 2), 1000);
}

当你调用 double(3); 时,发生了以下几件事:

  1. 调用 double 函数:传递给它的值是 3
  2. 执行第一个 setTimeout:这个 setTimeout 被设置了一个延迟时间(1000毫秒或1秒)。它的回调函数是另一个 setTimeout 调用。
  3. 函数退出double 函数的执行到此结束。由于第一个 setTimeout 里面的操作是异步的,所以 double 函数不会等待它完成就直接退出了。这就是为什么说函数在调度异步操作后会立即退出。
  4. 第一个 setTimeout 的回调执行:大约1秒后,第一个 setTimeout 里的回调函数被执行。这个回调函数本身是另一个 setTimeout 调用,它立即调用 console.log 函数(延迟时间为0),并将 value * 2 的结果传递给它。
  5. 第二个 setTimeout 的回调执行:虽然延迟是0,但由于JavaScript的事件循环和任务队列的机制,console.log 函数的执行会被放入到任务队列中,等待当前执行栈清空,再执行。因此,console.log(value * 2)(即输出 6)会在第一个 setTimeout 的回调执行后尽快执行,但不会是立即执行。

总之,double 函数展示了如何通过嵌套 setTimeout 来安排异步任务。它利用JavaScript的事件循环机制,在调度异步操作(如延时调用)后立即退出。这个异步操作会在未来的某个时刻执行,但不会阻塞函数返回或后续代码的执行。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值