您有几种选择:
1)由于其他所有操作都使用
fs的同步方法完成,因此您可以更改
fs.readdir为
fs.readdirSync:
function searchForPackage(directory) { fs.readdirSync(directory).forEach(file => { var currentLocation = directory + "/" + file; if (fs.statSync(currentLocation).isDirectory() && file != 'bin' && file != '.bin') { searchForPackage(currentLocation); return; } else if (file == "package.json") { var content = fs.readFileSync(currentLocation); var jsonContent = JSON.parse(content); var obj = { name: jsonContent.name, license: jsonContent.license, version: jsonContent.version } jsonTable.push(obj); jsonTable.push({name: jsonContent.name, license: jsonContent.license, version: jsonContent.version}); return; } })}2)转换
fs.readdirSync为a
Promise然后使用
async/await:
async function searchForPackage(directory) { const files = await new Promise((resolve, reject) => { fs.readdir(directory, (err, files) => { if (err) reject(err); else resolve(files); }); }); await Promise.all(files.map(async file => { var currentLocation = directory + "/" + file; if (fs.statSync(currentLocation).isDirectory() && file != 'bin' && file != '.bin') { await searchForPackage(currentLocation); return; } else if (file == "package.json") { var content = fs.readFileSync(currentLocation); var jsonContent = JSON.parse(content); var obj = { name: jsonContent.name, license: jsonContent.license, version: jsonContent.version } jsonTable.push(obj); jsonTable.push({name: jsonContent.name, license: jsonContent.license, version: jsonContent.version}); return; } }))}3)使用几个第三方模块来进行一些清理(
fs-extra照顾像
fs.readdir您一样的异步方法。
async-af提供可链接的异步Javascript方法,例如parallel
forEach。):
const fs = require('fs-extra');const AsyncAF = require('async-af');async function searchForPackage(directory) { await AsyncAF(fs.readdir(directory)).forEach(async file => { var currentLocation = directory + "/" + file; if (fs.statSync(currentLocation).isDirectory() && file != 'bin' && file != '.bin') { await searchForPackage(currentLocation); } else if (file == "package.json") { var content = fs.readFileSync(currentLocation); var jsonContent = JSON.parse(content); var obj = { name: jsonContent.name, license: jsonContent.license, version: jsonContent.version } jsonTable.push(obj); jsonTable.push({name: jsonContent.name, license: jsonContent.license, version: jsonContent.version}); } });}


