NodeJS Заполнение массива из recursive-readdir - PullRequest
0 голосов
/ 20 апреля 2020

Я новичок в обещаниях и знаю, что проблема в том, что я пытаюсь прочитать массив до того, как обещания разрешатся. Если я просто укажу console.log на файлы, которые они печатают нормально, мне просто нужны они в массиве, чтобы я мог их перебирать.

Может кто-нибудь подтолкнуть меня в правильном направлении? Я использую модуль узла recursive-readdir, чтобы получить список всех файлов в каталогах dir1 и dir2 и добавить их в массив (var sitemap).

var recursive = require("recursive-readdir");

var directories = ['dir1', 'dir2'];
var sitemap = [];
for(var i = 0; i < directories.length; i++) {
    recursive(directories[i], ["*.pdf", "*.json", "*.xml", "*.jpg", "*.gif", "*.png", "*.css", "*.js", "*.flv", "*.swf", "*.ttf", "*.pptx", "*.doc", "*.docx"], function (err, files) {
        for(var x = 0; x < files.length; x++) {
            let url = 'example.com/' + files[x];
            addURL(url);
        }
    });
}

function addURL(url) {
    sitemap.push(url);
}

// Returns empty array
console.log(sitemap);

1 Ответ

0 голосов
/ 20 апреля 2020

Ниже будет работать код, добавлен console.log (карта сайта) в Promise, проверьте

const recursive = require("recursive-readdir");

const directories = ['dir1', 'dir2'];
const sitemap = [];


const extns = ["*.pdf", "*.json", "*.xml", "*.jpg", "*.gif", "*.png", "*.css", "*.js", "*.flv", "*.swf", "*.ttf", "*.pptx", "*.doc", "*.docx"];


const allRequests = directories.map((item) => {
  return recursive(item, extns);
});

Promise.all(allRequests).then((files) => {
  for (let x = 0; x < files.length; x++) {
    let url = 'example.com/' + files[x];
    addURL(url);
  }
  console.log(sitemap);
});

function addURL(url) {
  sitemap.push(url);
}


//console.log(sitemap);

Вот один из подходов, использующих обещание ... предложит лучший подход для обработки нескольких каталогов ..

var recursive = require("recursive-readdir");

var directories = ['dir1', 'dir2'];
var sitemap = [];


const extns = ["*.pdf", "*.json", "*.xml", "*.jpg", "*.gif", "*.png", "*.css", "*.js", "*.flv", "*.swf", "*.ttf", "*.pptx", "*.doc", "*.docx"];
const path1 = recursive(directories[0], extns);
const path2 = recursive(directories[1], extns);

Promise.all([path1, path2]).then(function(files) {
  for (let x = 0; x < files.length; x++) {
    let url = 'example.com/' + files[x];
    addURL(url);
  }
console.log(sitemap);
});

function addURL(url) {
  sitemap.push(url);
}


//console.log(sitemap);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...