javascript - 无法看到node js程序的延迟

标签 javascript node.js

我是 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秒后没有立即回调,为什么它要等待接受所有订单并交付订单,为什么它不能交付TimedOut订单?

您能否帮我实现一个代码,该代码可以为我提供上面提到的预期输出?

最佳答案

setTimeout 会将函数放在堆上,并在以下时间后运行:

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

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

使用超时来制造延迟。

关于javascript - 无法看到node js程序的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172035/

相关文章:

javascript - 无法使用 React.render 渲染元素 - ReactJS

javascript - 在 Angular/Typescript 中单击按钮/图标时如何将文本字段设置为输入字段?

javascript - 展平嵌套回调

node.js - REST API 权限/角色管理

javascript - 在运行时加载 css

javascript - 尝试将类添加到 <div> - javascript

javascript - angularjs ui网格搜索

javascript - Angular 2 HTTP json 请求在尝试解析结果时给我一个奇怪的响应

node.js - ES6 方法得到一个空值 "this"并且类变量不可访问

javascript - 如何在 express.js 中创建动态中间件链