Javascript 如果执行未在给定时间内完成,Nodejs解决承诺

Javascript 如果执行未在给定时间内完成,Nodejs解决承诺,javascript,node.js,typescript,promise,Javascript,Node.js,Typescript,Promise,设置超时 return await new Promise(function (resolve, reject) { //some work goes here resolve(true) }); 使用setTimeout时,即使我的任务在1秒内完成,它仍会等待5秒。我的要求是,如果任务在5秒内完成,则承诺应立即解决,否则将在5秒内解决,请在任务正常完成时清除超时: return await new Promise(function (resolve, reject) {

设置超时

 return await new Promise(function (resolve, reject) {

 //some work goes here

resolve(true)

  });

使用setTimeout时,即使我的任务在1秒内完成,它仍会等待5秒。我的要求是,如果任务在5秒内完成,则承诺应立即解决,否则将在5秒内解决,请在任务正常完成时清除超时:

 return await new Promise(function (resolve, reject) {

 //some work goes here

setTimeout(function() { resolve(true); }, 5000);

  });

在任务正常完成时清除超时:

 return await new Promise(function (resolve, reject) {

 //some work goes here

setTimeout(function() { resolve(true); }, 5000);

  });

您可以这样做:

return new Promise(function (resolve, reject) {

    let safetyTimeout = setTimeout(resolve, 5000);

    //some work goes here

    // When it's done :

    clearTimeout(safetyTimeout);
    resolve();
});
请注意以下几点:

  • 在任何人工作前指定5s的时间(陈述定位非常重要)
  • 然后完成其他工作
  • 如果您的工作在5秒前完成,请立即解决,如上例所示

您可以这样做:

return new Promise(function (resolve, reject) {

    let safetyTimeout = setTimeout(resolve, 5000);

    //some work goes here

    // When it's done :

    clearTimeout(safetyTimeout);
    resolve();
});
请注意以下几点:

  • 在任何人工作前指定5s的时间(陈述定位非常重要)
  • 然后完成其他工作
  • 如果您的工作在5秒前完成,请立即解决,如上例所示

杰里米·泰勒的回答是我认为最适合clearTimout的做法

只是因为我花了一些时间写了一段代码供任何人使用,我发布了它,也许它会帮助一些人进行代码实验

return await new Promise(function (resolve, reject) {
 setTimeout(function() { resolve(true); }, 5000);
 let result = await someworkDone();
 if (result) resolve(result);
});

只是别忘了实现Jeremy Thille clearTimeout。

Jeremy Thille answer是我认为clearTimeout的最佳实践

只是因为我花了一些时间写了一段代码供任何人使用,我发布了它,也许它会帮助一些人进行代码实验

return await new Promise(function (resolve, reject) {
 setTimeout(function() { resolve(true); }, 5000);
 let result = await someworkDone();
 if (result) resolve(result);
});

只是别忘了实现Jeremy Thille clearTimeout。

如果我不使用clearTimeoutWell,会有什么影响吗如果你不使用,你的承诺会解决两次如果我不使用clearTimeoutWell,会有什么影响吗,你的承诺将解决两次你的承诺将解决两次…你的承诺将解决两次…承诺将解决两次。如果你想阻止超时,你需要取消超时。是的,我理解。我只是发布了它,因为如果有人想尝试这个问题,它是一个现成的代码片段。我没有包括clearTimeout,只是为了不“窃取”任何赞扬。这个承诺将解决两次。如果你想阻止超时,你需要取消超时。是的,我理解。我只是发布了它,因为如果有人想尝试这个问题,它是一个现成的代码片段。我没有包括clearTimeout,只是为了不“窃取”任何赞扬。