无法看到节点js程序中的延迟

时间:2016-07-03 16:35:27

标签: javascript node.js

我是节点js的新手,我开始使用以下程序,

我想知道延迟或并行执行是如何工作的,所以我从教程网站上获取了一个程序,我的预期是

  1. 下订单1此处等待3秒
  2. 下订单2此处等待3秒钟,因此已过期6秒

  3. 发送订单号1(自第一次超时5秒起) 过期)

  4. 下订单3等等,这里我们接受2个订单并交付 订购     5秒后结束后6秒钟
  5. 但我得到低于输出

    1. 订单编号为1 // 3秒延迟
    2. 订单编号为2 // 3秒延迟
    3. 订单编号为3 // 3秒延迟
    4. 订单编号为4 // 3秒延迟
    5. 订单编号为5 // 3秒延迟
    6. 发出订单号1 //无延迟
    7. 发出订单号2 //无延迟
    8. 发出订单号3 //无延迟
    9. 发出订单号4 //无延迟
    10. 发出第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);
      
    11. 有人可以解释一下为什么setTimeOut(回调,5000)在5秒后没有立即回调,为什么它等待接受所有订单并交付oder,它无法提供TimedOut订单?

      请你帮我实现一个代码可以给我预期的输出,如上所述?

1 个答案:

答案 0 :(得分:0)

setTimeout会将一个函数放在堆上,然后运行它:

  • 已经过了一段时间
  • 事件循环不忙于做其他事情

由于JavaScript忙于运行while循环,因此它不会运行任何等待超时的函数。它将首先完成该功能的运行。

使用超时来代替创建延迟。