我是 Node js 新手,我从下面的程序开始,
我想看看延迟或并行执行是如何工作的,所以我从教程网站上获取了一个程序,我的预期结果是
- 下订单1这里会等待3秒
下订单2这里会再等待3秒,这样6秒就过期了
正在交付 1 号订单(自第一次超时 5 秒后) 已过期)
- 下订单 3 依此类推,这里我们接 2 个订单并发货 命令 6秒后5秒结束
但是我得到的输出低于
- 订单编号为 1//3 秒延迟
- 订单编号为 2//3 秒延迟
- 订单编号为 3//3 秒延迟
- 订单编号为 4//3 秒延迟
- 订单编号为 5//3 秒延迟
- 正在配送订单号 1//无延迟
- 正在配送 2 号订单//无延迟
- 正在配送 3 号订单//无延迟
- 正在配送 4 号订单//无延迟
正在交付 5 号订单
function placeOrder(orderNumber) { console.log('Order numner is ' +orderNumber); cookAndDeliverFood(function () { console.log('Delivering order Number ' +orderNumber); }) } function cookAndDeliverFood( callback) { setTimeout(callback , 1000); var waitTill = new Date(new Date().getTime() + 3 * 1000); while(waitTill > new Date()){} } placeOrder(1); placeOrder(2); placeOrder(3); placeOrder(4); placeOrder(5);
有人可以解释一下为什么setTimeOut(callback,5000)在5秒后没有立即回调,为什么它要等待接受所有订单并交付订单,为什么它不能交付TimedOut订单?
您能否帮我实现一个代码,该代码可以为我提供上面提到的预期输出?
最佳答案
setTimeout
会将函数放在堆上,并在以下时间后运行:
- 已经过了一定时间并且
- 事件循环不忙于做其他事情
由于 JavaScript 正忙于运行 while
循环,因此它不会运行任何等待超时的函数。它将首先完成该函数的运行。
使用超时来制造延迟。
关于javascript - 无法看到node js程序的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172035/