在 Node.js 中休眠

2024-03-28

假设没有“本地”方法来实现这一点,我的解决方案是

sleep = function(time) {
        var stop = new Date().getTime();
        while(new Date().getTime() < stop + time) {
            ;
        }
        return new Promise((r,_)=> r())
      }

这样做sleep(1000*3).then(()=>console.log("awake"))它会休眠 3 秒,然后解决Promise:

(请注意,它会冻结此页面一秒钟。)

sleep = function(time) {
  var stop = new Date().getTime();
  while (new Date().getTime() < stop + time) {;
  }
  return new Promise((r, _) => r())
}
console.log("sleeping...")
sleep(1000 * 1).then(() => console.log("awake"))

假设这将在主线程中运行,它将冻结主进程,以便执行

sleep(1000*1).then(()=>console.log("awake")); console.log("Hello")

它将产生一个输出

VM2628:1 Hello
VM2628:1 awake

在睡眠的最后阶段。当然做

setTimeout(()=>sleep(1000*3).then(()=>console.log("awake")),1000);console.log("Hello")
VM2815:1 Hello
undefined
VM2815:1 awake

将使它异步,但它不能满足我的需要(将sleep我的主要流程)。 还有更好的办法吗?

[UPDATE]承诺版本

/**
 * Sleep for time [msec]
 * @param time int milliseconds
 * @return Promise delayed resolve
 * @usage
    sleep(1000*3).then(()=>console.log("awake"))
 */
sleepP: function (time) {
  return new Promise((resolve, reject) => {
    var stop = new Date().getTime();
    while (new Date().getTime() < stop + time) {
      ;
    }
    return resolve(true)
  });
}

可以这样称呼

await sleepP( 1000 * 3 );

根本不需要冷冻。由于 JavaScript 的异步性,我们可以将部分代码保留一段时间,稍后再恢复。首先我们需要一个有前途的计时器:

 const timer = ms => new Promise( res => setTimeout(res, ms));

然后我们就可以简单地使用它:

console.log("wait 3 seconds")
timer(3000).then(_=>console.log("done"));

或者加一点语法糖:

(async function(){
  console.log("wait 3 seconds");
  await timer(3000);
  console.log("done");
})()

如果你真的想冻结(非常糟糕),你根本不需要承诺:

function freeze(time) {
    const stop = new Date().getTime() + time;
    while(new Date().getTime() < stop);       
}

console.log("freeze 3s");
freeze(3000);
console.log("done");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Node.js 中休眠 的相关文章

  • 这个特定的 ReactJs 代码是如何执行的初学者问题?

    我是初学者 正在阅读大量代码 现在我想知道下面的代码我明白这段代码在做什么 我需要澄清的是代码流程 当我运行它时 我看到图像正在加载 React 是从上到下执行代码吗 占位符图像异步获得正确的图像 但会App如果需要时间 组件会开始渲染但没
  • IE 9 的子元素不透明,我无法使用 captify 阻止它

    好的 我正在使用一段名为 Captify 的 javascript 它为您的图像添加了一个带有文本的小弹出窗口 适用于所有接受 IE9 的浏览器 IE9 会淡化弹出 div 中的所有内容 我已阅读其子元素问题 但无法修复它 由于在网上任何地
  • GeoJSON 要素坐标未显示在 OpenLayers 地图上

    我正在尝试显示一个GeoJSON地图上的多边形 我使用了 OpenLayers 提供的示例以及以下数据 但仅显示第二个多边形 var geojsonObject type FeatureCollection crs type name fe
  • 嵌套对象的 AJV 模式验证

    函数返回的对象看起来像这样 answer vehicle type 1 message Car model VW color red 答案 对象始终存在 其他字段基于 vehicle type E g 如果vehicle type 1 则有
  • 按自定义字母顺序对数组进行排序

    如何对这样的数组进行排序 apple very auto tom tim violet 要按 v a t x b 等排序 不按字母顺序 violet very auto tom tim 在脚本中 我会做这样的事情 myArray sort
  • 如何滚动到 jQuery Mobile 中的页面元素?

    我有一个很长的 jQuery 移动页面 并且想在页面加载后滚动到该页面中间的元素 到目前为止 我已经尝试了一些事情 最成功的是 jQuery document bind mobileinit function var target if t
  • 如何最好地实现多个重叠元素的翻转和推出事件?

    Problem 我正在开发一个网站 其中有一个 拨号盘 显示代表伞式公司不同部门的多个选项卡 目前我已经用 HTML CSS 准备好了一切 每个选项卡的定位 内圈处于较高位置z index因为选项卡在滚动时需要向外动画 我可以实现这部分 选
  • HTML5 拖放 - 没有透明度?

    当我将一个元素拖放到页面上时 该元素会变成 幻影 基本上它获得了一些透明度值 有什么办法可以做到吗opacity 1 看来是做不到了 拖动的元素被放入具有自己的不透明度 低于 1 的容器中 这意味着虽然您可以降低拖动元素的不透明度 但您无法
  • 日期时间的自定义 JavaScriptConverter?

    我有一个对象 它有一个 DateTime 属性 我想通过 AJAX JSON 将该对象从 ashx 处理程序传递回网页 我不想使用第 3 方控件 当我这样做时 new JavaScriptSerializer Serialize DateT
  • HTML if 语句在 CDN 失败时加载本地 JS/CSS

    当从 CDN 或任何外部服务器加载 CSS JS 文件时 有可能 即使概率很低 由于外部故障而丢失该文件 在这种情况下 html 页面将因缺乏适当的 CSS 和 JS 而被损坏 有没有一种实用的方法可以在 CDN 故障时加载本地版本 IF
  • 如何在流程图中间隔刻度线?

    我下面有一个流程图 您将看到标签被压缩 我想使刻度之间的宽度确保显示所有标签 标记如下 div div class graph info a href span span a a href class active span span a
  • 单击窗口后才检测到 keydown

    在我的 Web 应用程序中 我有一个用于打开菜单的键的事件侦听器 仅当我单击页面上的任意位置后 此功能才可以正常工作 我尝试将焦点添加到窗口加载 但这仍然不会让 keydown 函数运行 直到我单击页面上的某个位置之后 有谁知道这是否可能
  • 用于客户端存储和服务器端同步的javascript库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 javascript 库 它可以让我将数据存储在客户端数据库中 并在后台自动将数据库同
  • ERR_IMPORT_ASSERTION_TYPE_MISSING 用于导入 json 文件

    这段代码运行良好 我不知道是因为我升级到 Node 17 还是什么原因 但现在我明白了 TypeError ERR IMPORT ASSERTION TYPE MISSING Module file Users xxxxx code pro
  • 将 javascript 变量发送到服务器端 ASP .NET

    我需要在回发时将 JavaScript 数据传递到服务器端 Exvar jsVariableToPass new Object jsVariableToPass key1 value1 jsVariableToPass key2 value
  • 条件顺序仅在 init AngularJS 上执行

    如何在视图初始化时仅运行 orderBy 过滤器一次 我不希望我的列表在运行时被重新排序 li li 使用 orderBy 作为控制器中的过滤器 app controller DemoCtrl scope filter function s
  • 从React Redux中的package.json获取版本号(create-react-app)

    OP 编辑 如果其他人遇到此问题 该应用程序是使用创建的创建反应应用程序 https github com facebookincubator create react app 这限制导入到 src 文件夹内 但是如果你将react scr
  • 垃圾收集器不适用于 NodeJS / Chrome 中的类型化数组

    我最初将其记录为原项目中的一个问题 https github com nodejs help issues 3590 它立即转移到帮助主题 没有很好的解释 所以现在我想在这里提问 如果我们在 NodeJS v14 v16 v17 中运行以下
  • 禁用 Materialise Carousel 上的触摸

    看起来以前没有人问过这个问题 因为我几乎在互联网上寻找一个非常简单的答案 如何禁用在物化轮播上向左 向右滑动的功能 在 Materialize js 添加 编辑 var allowCarouselDrag true value functi
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg

随机推荐

  • 快速滚动 UIPageViewController 阻止视图控制器更新

    我有一个 UIPageviewcontroller 里面有两个控制器 当您滑动到下一个时 我使用 viewController 参数来设置适当的委托 但我的经验是 如果你滑动得太快 函数 viewControllerAfter 就无法正确更
  • 用于加密的公钥;解密用的私钥?

    我知道私钥和公钥在数学上是相关的 用一个密钥加密的数据只能用另一个密钥解密 我的问题是私钥总是用于加密数据 而公钥总是用于解密数据 或者可以反过来 如果是这样 您能否给出一些在其他方向使用的示例应用程序 用于加密的公钥和用于解密的私钥 加密
  • 连接到 unix:/var/run/php5-fpm.sock 失败。我的设置有什么问题吗?

    我在 DigitalOcean 上有一个 2GB VPS 并且在 Debian 7 下使用 NGINX php fpm 和 unix 套接字托管 WordPress 3 9 1 它一直工作得很好 直到上周它开始显示 502 bad gate
  • 根据 pandas 中的给定条件派生特征或列

    我有 df 如下所示 ID Age days N 30 N 31 90 N 91 180 N 180 365 1 201 60 15 30 1 2 800 0 15 5 10 3 800 0 0 10 6 4 100 0 0 0 370 5
  • 在 HTML5 中使用 IE 特定元标记是否合法?

    我一直在尝试在标题中使用以下两行来验证 html5 文档 整个文档验证得非常好 但是这两行是 IE 特定的 导致页面无效 我的问题 这些元标记有合法的 HTML5 语法吗 我非常希望我的代码有效 但是这些标签不能被省略 根据您对服务器 服务
  • Tensorflow:如何在语义分割过程中忽略特定标签?

    我正在使用张量流进行语义分割 在计算像素损失时 如何告诉张量流忽略特定标签 我读了在这篇文章中 https stackoverflow com questions 39091432 tensorflow softmax ignore neg
  • 具有多个 SSH 密钥对的 Ansible

    我是 Ansible 的新手 我能够对其进行测试并且其工作正常 符合我的测试要求 为了在管理节点和客户端节点之间建立连接 我使用已经创建的 ssh 密钥对 如何使用具有不同 SSH 密钥对的另一个节点 作为参考 我正在考虑 3 个具有不同密
  • Maven - 依赖于多模块聚合器项目

    我有一个多模块 Maven 项目 其结构如下 projectA parent module 1 module 2 我有另一个项目 我想将所有模块引入projectA parent作为运行时依赖项 它是一个 Spring 应用程序 并且每个模
  • 我的图书馆的变化使它变慢了很多。分析对我没有帮助。速度缓慢的原因可能是什么?

    我的问题 简述 我对我的库进行了更改 现在速度慢得多 但我无法弄清楚它在哪里花费了所有额外的时间 分析报告没有帮助 请帮我看看可能是什么原因 一些背景 我创建了一个 Redis 客户端库 名为Hedis http hackage haske
  • 什么是“异步固定句柄”?

    我正在尝试调查一个非常严重的软件崩溃 这可能与托管堆损坏有关 因为它发生在垃圾收集期间 将 WinDbg 与 SOS gchandles 命令一起使用 我得到类似的信息 0 000 gt gchandles GC Handle Statis
  • Magento - 获取产品集合的结果视图 HTML

    我从网络服务中获取了 magento id 列表 我将它们加载到数组中 product ids 所以我有这样的东西 Array 0 gt 1965 1 gt 3371 2 gt 1052 然后我可以将其制作成一个集合 collection
  • OnCollisionEnter() 在 Unity3D 中不起作用

    我有一个带有网格碰撞器的对象和一个带有球体碰撞器的预制件 我希望如果两者发生碰撞 预制件的实例就会被破坏 我在脚本中写了以下内容 private void OnCollisionEnter Collision c if c target D
  • 单线程应用程序是一种死技术吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • VB6的默认字体从哪里获取

    VB6从哪里得到的default字体来自 是系统字体吗 是由地区决定的吗 无论实际字体如何 它的大小总是相同吗 应用程序的字体在Font控件的属性 VB6默认有MS 无衬线字体 大小 8 这是 Windows 95 98 中的默认系统字体
  • 根据内容调整iframe高度

    我正在使用以下脚本自动调整 iframe 高度 function autoIframe frameId try frame document getElementById frameId innerDoc frame contentDocu
  • PHP 中有从数组中提取“列”的函数吗?

    我有一个数组的数组 具有以下结构 array array page gt page1 name gt pagename1 array page gt page2 name gt pagename2 array page gt page3 n
  • 如何在 Raphael 中使用 eve() ?

    有人可以给我一个拉斐尔的简单例子吗eve 我不太明白参数以及如何调用事件 我查了一下 但好像用过的人不多 事件功能的简单示例Rapha l http www raphaeljs com 我们定义将触发事件的函数 function bar v
  • javascript 数组的范围从 IE9 到 FireFox/Chrome 有所不同

    我已经缩小了我的基本问题的范围 从 IE9 到 FireFox 和 Chrome 数组的范围有所不同 在以下函数 仅摘录 中 我声明一个数组 然后通过调用 getJSON 来填充它 因为引用 HoldEm 的行出现在 ProcessArra
  • 查找此 XML 文档中的值的正确 XPath 查询是什么?

    假设我有这个 XML 文档
  • 在 Node.js 中休眠

    假设没有 本地 方法来实现这一点 我的解决方案是 sleep function time var stop new Date getTime while new Date getTime lt stop time return new Pr