Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果超过某个限制时间,如何在Node.js中完成一个操作?_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 如果超过某个限制时间,如何在Node.js中完成一个操作?

Javascript 如果超过某个限制时间,如何在Node.js中完成一个操作?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,假设我们想要在Node.js中执行一些需要一些时间才能完成的操作,比如说doHeavyWork()。我们通常要做的是传递一个回调函数,如下所示: doHeavyWork(params, callbackFunction); 现在,我想确定一个完成操作的时限。我想要的是,如果该操作的正常运行时间超过了限制时间,函数将终止并通知回调已超过限制时间 如何在Node.js中实现这一点?您可能认为通过一个简单的回调就可以实现这一点,但我将为您说明一个问题 函数doHeavyWork(参数,回调){ /

假设我们想要在Node.js中执行一些需要一些时间才能完成的操作,比如说
doHeavyWork()
。我们通常要做的是传递一个回调函数,如下所示:

doHeavyWork(params, callbackFunction);
现在,我想确定一个完成操作的时限。我想要的是,如果该操作的正常运行时间超过了限制时间,函数将终止并通知回调已超过限制时间


如何在Node.js中实现这一点?

您可能认为通过一个简单的回调就可以实现这一点,但我将为您说明一个问题

函数doHeavyWork(参数,回调){
//设置超时
var timeout=setTimeout(回调,5000,错误('timeout'))
//一些调试消息
console.log('请稍候…')
//开始繁重的工作
//我们在这里使用setTimeout模拟繁重的工作
setTimeout(函数(){
//如果功能及时完成,请清除超时
clearTimeout(超时)
//无误回调
回调(null,“完成”)
}, 3000)
}
//检查它是否工作
doHeavyWork('some params',函数(err,res){
如果(错误)
抛出错误
其他的
console.log(res)

})
使用承诺而不是回调。启动流程,并在完成后解决问题。启动计时器并在计时器完成时拒绝。谁先完成谁就赢。
doHeavyWork()
函数是同步代码(如计算机密集型内容)还是非同步代码(如文件或网络)?如果是同步的,那么如果不修改函数本身,它将非常困难。@jfriend00导致我出现此问题的实际具体情况是执行异步操作(HTTP请求)。当我提问时,我认为有一种方法可以以同样的方式处理这两种情况,这就是为什么我没有在问题中具体说明。我不认为同步会让事情变得更复杂。