代码之家  ›  专栏  ›  技术社区  ›  Anish Sana

如何超时并取消fs。NodeJS中的rm()操作?

  •  0
  • Anish Sana  · 技术社区  · 4 年前

    我的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) => {
      if (!Array.isArray(directories)) {
        // Respond with a 400 error to client.
      }
    
      if (!directories.length > 0) {
        // Respond with a 400 error to client.
      }
    
      try {
        const promisesList = await Promise.all(
          directories.map((d) => 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) => {
      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 模块似乎没有任何内在的东西来执行这样的事情。

    显然,我可以有一个超时,然后函数返回。但是,这意味着删除操作仍在该目录的文件系统上运行。

    我如何在超时后终止删除操作?任何建议和/或例子都会非常有用。

    0 回复  |  直到 4 年前
    推荐文章