Sleep in Node.js(在Node.js中睡觉)
本文介绍了在Node.js中睡觉的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设没有"本地"方法来实现这一点,我的解决方案类似于
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:
(请注意,它将在一秒钟内冻结此页面。)
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">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我的主进程中)。
还有更好的办法吗?
推荐答案
根本不需要冻结。由于Java脚本的异步性,我们可以将部分代码保留一段时间,稍后再继续。首先,我们需要一个有前途的计时器:
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");
这篇关于在Node.js中睡觉的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在Node.js中睡觉
猜你喜欢
- Fetch API 如何获取响应体? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- addEventListener 在 IE 11 中不起作用 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
