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秒前完成,请立即解决,如上例所示
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,只是为了不“窃取”任何赞扬。