【发布时间】:2018-04-06 20:21:11
【问题描述】:
假设没有“本机”方法来实现这一点,我的解决方案是
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我的主要进程)。
有更好的方法吗?
【问题讨论】:
-
为什么要冻结你的 JS 解释器 3 秒?为什么不像该语言设计的那样只进行异步编程,而不必冻结任何东西?
标签: javascript node.js multithreading sleep