无法在node js程序中看到延迟

Unable to see the delay in the node js program

本文关键字:延迟 程序 js node      更新时间:2023-09-26

我是node js的新手,我从下面的程序开始,

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

  1. 下订单1这里它将等待3秒
  2. 下订单2这里它将等待3秒,因此6秒过期

  3. 发送订单号1(从第一次超时5秒开始)过期)

  4. 下订单3个等等,这里我们接2个订单,发货订单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);
    

有人能解释一下为什么setTimeOut(callback,5000)没有在5秒后立即被回调,为什么它等待所有的订单和交付订单,为什么它不能交付超时订单?

你能帮我实现一个代码,可以给我预期的输出,我上面提到的?

setTimeout将把一个函数放在堆中,它将在以下情况下运行:

  • 已经过了一段时间
  • 事件循环没有忙着做其他事情

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

使用超时来创建延迟