#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()
функция не имеет такой опции, поэтому вы ничего не можете сделать, чтобы добавить ее к этой конкретной операции.