Node Js 解决在给定时间内未完成的执行承诺
Nodejs resolve promise if execution not completed withing given time
return await new Promise(function (resolve, reject) {
//some work goes here
resolve(true)
});
有设置超时
return await new Promise(function (resolve, reject) {
//some work goes here
setTimeout(function() { resolve(true); }, 5000);
});
使用 setTimeout,即使我的任务在 1 秒内完成,它也会等待 5 秒。我的要求是,如果任务在 5 秒内完成,那么 promise 应该立即解决,否则它将在 5 秒后解决
当您的任务正常完成时清除超时:
return new Promise(function (resolve, reject) {
let safetyTimeout = setTimeout(resolve, 5000);
//some work goes here
// When it's done :
clearTimeout(safetyTimeout);
resolve();
});
你可以这样做:
return await new Promise(function (resolve, reject) {
setTimeout(function() { resolve(true); }, 5000);
let result = await someworkDone();
if (result) resolve(result);
});
这里需要注意的地方:
- 指定任何人工作前5s的时间(语句定位很重要)
- 然后完成其他工作
- 如果您的工作在 5 秒内完成,请立即解决,如上例所示。
Jeremy Thille 的回答是我认为使用 clearTimout 的最佳实践。
只是因为我花了一些时间写了一段代码供任何人使用,我post它,也许它会对他们的代码实验有所帮助。
async function test() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve("5 Seconds Passed");
}, 5000);
// Some work equivalent to
someWork(3000, resolve);
});
}
console.log(await test());
function someWork(time, resolve) {
// Some work goes here.
setTimeout(function () {
console.log("WORK STILL RUNNING");
resolve("INSIDE 2nd TIMEOUT");
}, time);
}
别忘了实施 Jeremy Thille clearTimeout。
return await new Promise(function (resolve, reject) {
//some work goes here
resolve(true)
});
有设置超时
return await new Promise(function (resolve, reject) {
//some work goes here
setTimeout(function() { resolve(true); }, 5000);
});
使用 setTimeout,即使我的任务在 1 秒内完成,它也会等待 5 秒。我的要求是,如果任务在 5 秒内完成,那么 promise 应该立即解决,否则它将在 5 秒后解决
当您的任务正常完成时清除超时:
return new Promise(function (resolve, reject) {
let safetyTimeout = setTimeout(resolve, 5000);
//some work goes here
// When it's done :
clearTimeout(safetyTimeout);
resolve();
});
你可以这样做:
return await new Promise(function (resolve, reject) {
setTimeout(function() { resolve(true); }, 5000);
let result = await someworkDone();
if (result) resolve(result);
});
这里需要注意的地方:
- 指定任何人工作前5s的时间(语句定位很重要)
- 然后完成其他工作
- 如果您的工作在 5 秒内完成,请立即解决,如上例所示。
Jeremy Thille 的回答是我认为使用 clearTimout 的最佳实践。
只是因为我花了一些时间写了一段代码供任何人使用,我post它,也许它会对他们的代码实验有所帮助。
async function test() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve("5 Seconds Passed");
}, 5000);
// Some work equivalent to
someWork(3000, resolve);
});
}
console.log(await test());
function someWork(time, resolve) {
// Some work goes here.
setTimeout(function () {
console.log("WORK STILL RUNNING");
resolve("INSIDE 2nd TIMEOUT");
}, time);
}
别忘了实施 Jeremy Thille clearTimeout。