У меня есть папка с кучей файлов JSON, которая выглядит следующим образом:
|
|-foo.json
|-bar.json
|-qux.json
|-baz.json
|-zot.json
Каждый файл JSON имеет свойство children
, которое указывает на некоторые из других файлов JSON, так что они всеопиши дерево.Теперь скажите, что это foo.json:
foo.json
{
"id": "foo",
...
"children": [
"bar.json",
"baz.json"
]
...
}
Скажите, что bar.json не имеетchildren
свойство и что это baz.json:
baz.json
{
"id": "baz",
...
"children": [
"zot.json"
]
...
}
Я пытаюсь написать узелПрограмма, которая будет перечислять потомков данного файла JSON.Это означает, что для foo.json
должно получиться [bar, baz, zot]
.
Я использую fs-extra для чтения файлов JSON.
Если бы я делал это синхронно, я бы написал что-то вроде этого:
const fs = require('fs-extra');
var descendants = ["foo.json"];
for(var k = 0; k < descendants.length; k++){
var obj = fs.readJsonSync(descendants[k]);
if(obj.children) descendants.concat(obj.children);
}
return descendants;
Примечание: Для простоты предположим, что скрипт выполняется накорень каталога, в котором файлы json
Но я бы хотел сделать это, используя обещания.Моя проблема в том, что я не могу разрешить обещание для каждого файла и добавить результат в переменную descendants
до окончания цикла, конечно, потому что цикл является синхронным.
Как правильно сделать это с помощью обещаний?В частности, я пытался использовать комбинацию Q.js и reduce
, чтобы помочь мне сделать это, но я до сих пор не смог правильно написать код.