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。