这是否可能限制javascript函数的执行时间?

这是否可能限制javascript函数的执行时间?,javascript,Javascript,我得到了一个很长的javascript函数,它可能会处理几秒钟。但是我想限制javascript的执行时间,如果超过X秒,无论执行结果如何,函数都将被终止。这可以在JS中实现吗?谢谢 我用承诺来实现这一点。我刚刚开始了2个承诺:第一个是履行承诺的功能,第二个是超时承诺——当操作失败时使用拒绝。 使用Promise.race我只是等待先完成什么操作。如果发生第二次拒绝,如果第一次拒绝,则我的代码成功完成 下面是一个例子: var p1=新承诺((解决,拒绝)=>{ setTimeout(reso

我得到了一个很长的javascript函数,它可能会处理几秒钟。但是我想限制javascript的执行时间,如果超过X秒,无论执行结果如何,函数都将被终止。这可以在JS中实现吗?谢谢

我用承诺来实现这一点。我刚刚开始了2个承诺:第一个是履行承诺的功能,第二个是超时承诺——当操作失败时使用拒绝。 使用
Promise.race
我只是等待先完成什么操作。如果发生第二次拒绝,如果第一次拒绝,则我的代码成功完成

下面是一个例子:

var p1=新承诺((解决,拒绝)=>{
setTimeout(resolve,2000,“长时间执行”);
}); 
var p2=新承诺((解决、拒绝)=>{
设置超时(解析,500,“正常”);
}); 
var p3=新承诺((解决、拒绝)=>{
设置超时(拒绝,1000,“拒绝”);
});
Promise.race([p1,p3])。然后(值=>{
console.log(值);
},原因=>{
console.log(原因)
});
Promise.race([p2,p3])。然后(值=>{
console.log(值);
},原因=>{
console.log(原因)

});JavaScript是单线程的,所以需要使用异步机制来实现您想要做的事情

其中一种方法是使用带有超时的单个承诺。如果发生超时,则您的承诺将被拒绝,否则承诺将被解决

示例代码可能类似于

var PTest = function () {
    return new Promise(function (resolve, reject) {
    setTimeout(function() {
      reject();
    }, 2000)
    // Lines of Code
    resolve();
  });
}
var myfunc = PTest();
myfunc.then(function () {
     console.log("Promise Resolved");
}).catch(function () {
     console.log("Promise Rejected");
});

如何终止函数?可以在函数本身内部进行检查(例如,
if(timeInFunction>1000)return
)。你不能使用某种外部监管者,因为JS只有一个执行线程。是什么导致函数花费这么多时间?里面有环吗?这是一个特定的行吗?如果没有像joews说的那样修改函数,这是不可能的,Javascript是单线程的!对于长时间运行的异步任务,这是一个简洁的解决方案,但我认为OP有一个阻塞同步函数调用。