【发布时间】:2022-01-25 15:02:03
【问题描述】:
每次我运行以下函数时,我希望它输出嵌入在我的 composer.json 文件中的不同路径,然后为每个包递归地执行此操作。但是,它只是一遍又一遍地给我同样的结果。请问我在这里错过了什么?
const packageComposer = async (node) => {
node = node ? __dirname : node;
let composer = fs.readFileSync(node + '/composer.json', 'utf8');
let dependencies = Object.keys(JSON.parse(composer).require);
console.log(node + '/composer.json');
dependencies.forEach(key => {
let dependency = key.split('/');
let dir = node + '/vendor/' + dependency[0] + '/' + dependency[1];
if (fs.existsSync(dir)) {
packageComposer(dir);
}
});
}
Composer.json 文件看起来像:
{
"require": {
"php": ">=7.2",
"alek13/slack": "^2.1",
"composer/installers": "^1.7",
"htmlburger/carbon-fields": "^3.3"
}
}
控制台输出:
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
/Users/user/Desktop/github/plugin-folder/composer.json
RangeError: Maximum call stack size exceeded
Exception in PromiseRejectCallback:
/Users/user/Desktop/github/plugin-folder/gulpfile.js:59
}
【问题讨论】:
-
您可以添加更多上下文吗?
composer.json看起来像什么?你保存文件了吗? -
为什么是
async这个函数? -
重申@Andy,它没有在正文中执行任何异步操作(甚至没有等待递归调用)。我认为这里有两个级别的问题:(1)关于什么应该是异步以及如何处理异步递归,(2)关于文件解析出了什么问题以及关于解析什么的假设会发现。我建议以相反的顺序攻击这些。为了解决后者,请发布文件中的一些行和一些控制台输出。
-
@jfriend00 我问是因为我不知道。您的评论既没有帮助也没有解释我可以做得更好的地方。通过显示我的 console.log 的输出,我提供了有关如何尝试使用它的有用上下文,您至少可以为我指明正确的方向。
-
安迪问为什么是
async而你还没有回答他。这与答案有关。我删除了我之前对该主题的评论,因为它有点刻薄。我很抱歉。
标签: javascript node.js asynchronous recursion