Как перебирать файлы с Promises в Node.js - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть папка с кучей файлов 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, чтобы помочь мне сделать это, но я до сих пор не смог правильно написать код.

...