首页 > 解决方案 > 如何使递归函数等待直到它完成 - nodejs

问题描述

我已经建立了这个端点:

app.get("/files", async (req, res) => {
    const getFilesFromLoc = async loc => {
        let filesString = "";
        await fs.readdir(loc, async (err, files) => {
            if (err) {
              console.error("Could not list the directory.", err);
              process.exit(1);
            }

            return await files.forEach(async file => {
                const newPath = path.join(loc, file);

                return await fs.stat(newPath, async (err, stat) => {
                    if (err) {
                      console.error("Error stating file.", err);
                      return;
                    }
                    if (stat.isFile()) {
                        const extension =  path.extname(newPath);

                        if (extension === ".js" || extension === ".jsx") {
                            return await fs.readFile(newPath, "utf8", (err, string) => {
                                if (err) {
                                  console.error("Error reading file.", err);
                                  return;
                                }

                                return filesString += string;
                            });
                        }
                    } else if (stat.isDirectory()) {
                        return await getFilesFromLoc(newPath);
                    }
                })
            })
        })
        return filesString;
    }
    const filesString = await getFilesFromLoc("src/client/actions");
    res.send(filesString);
});

它所做的是从一个起始路径开始,它收集每个 js 和 jsx 文件,将其转换为字符串,并将其推送给fileString.

但是,该功能运行良好。响应是一个空字符串。我在哪里做错了?

标签: javascriptnode.jsexpress

解决方案


推荐阅读