Как выполнить тайм-аут и отменить операцию fs.rm() в NodeJS?

#node.js #fs #rm

Вопрос:

У меня есть функция очистки рабочего пространства в приложении NodeJS, которая берет список путей к каталогам и удаляет их. Когда функция получает список путей, она использует Promise.all() для одновременного выполнения этих удалений следующим образом:

 /**  * Deletes directories.  *  * @param {Array} directories Array of directories to be deleted.  *  * @returns {Object} Response object with the status code and data.  */ const cleanup = async (directories) =gt; {  if (!Array.isArray(directories)) {  // Respond with a 400 error to client.  }   if (!directories.length gt; 0) {  // Respond with a 400 error to client.  }   try {  const promisesList = await Promise.all(  directories.map((d) =gt; deleteDirectory(d))  );  // Respond with a 207 multi status message to client.  } catch (err) {  // Respond with a 500 error to client.  } };  /**  * Performs a force delete on a provided directory.  *  * @param {String} directory Path of the directory to be deleted.  *  * @returns {Object} Response object with the status code and data.  */ const deleteDirectory = async (directory) =gt; {  console.log(`Deleting directory: ${directory}`);  try {  if ((await fs.stat(directory)).isDirectory()) {  await fs.rm(directory, { recursive: true, force: true });  // Return a 200 message.  }  } catch (err) {  if (err.message.includes("no such file or directory")) {  // Return a 404 error.  }  // Return a 500 error.  } };  

Я хочу реализовать функцию тайм-аута deleteDirectory() , которая отменяет длительную индивидуальную операцию удаления. fs Модуль, похоже, не имеет ничего встроенного для выполнения такой задачи.

Очевидно, что у меня может быть тайм-аут, после которого функция просто вернется. Однако это означало бы, что операция удаления все еще выполняется в файловой системе для этого каталога.

Как я могу фактически завершить операцию удаления после истечения тайм-аута? Любые советы и/или примеры были бы действительно полезны.

Комментарии:

1. Вероятно, вам придется реализовать свой собственный fs.rm() , чтобы вы могли проверить тайм-аут в середине операции и/или отменить/прервать ее в середине операции. Насколько я знаю, встроенная fs.rm() функция не имеет такой опции, поэтому вы ничего не можете сделать, чтобы добавить ее к этой конкретной операции.