Невозможно собрать sh элементов в массив после получения файлов из базы данных. - PullRequest
1 голос
/ 24 апреля 2020

Я получаю файлы из коллекции file_uploads из базы данных. В то же время я получаю файлы каталогов из другого места и сохраняю их в files_to_read []. циклически просматривая оба файла, я сопоставляю файлы и затем помещаю их в массив files_to_simulate.

const fs = require('fs')
let folder = '../../importedFiles/data';
let files_to_read = []
let files = fs.readdirSync(folder);
let fileSchema = require('../db/models/fileUpload');
let files_to_simulate = [];

files.forEach(file => {
    let fileStat = fs.statSync(folder + '/' + file).isDirectory();
    if(!fileStat) {
        files_to_read.push(file);
    }
});

fileSchema.find({}, async function(err, files) {
    files.forEach(function(file) {
        files_to_read.forEach(function(directoryFile) {
            var dbFile = file.name.split('.');
            let dirFile = directoryFile.split('.');
            if (dbFile[0] === dirFile[0]) {
                console.log('saa')
                files_to_simulate.push(dirFile[0]);
            }
        })
    })
});

console.log(files_to_simulate)

1 Ответ

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

Измените порядок вашего кода, и он будет работать нормально:

const fs = require('fs')
let folder = '../../importedFiles/data';
let files_to_read = []
let files = fs.readdirSync(folder);
let fileSchema = require('../db/models/fileUpload');
let files_to_simulate = [];

files.forEach(file => {
    let fileStat = fs.statSync(folder + '/' + file).isDirectory();
    if(!fileStat) {
        files_to_read.push(file);
    }
});

fileSchema.find({}, async function(err, files) {
    files.forEach(function(file) {
        files_to_read.forEach(function(directoryFile) {
            var dbFile = file.name.split('.');
            let dirFile = directoryFile.split('.');
            if (dbFile[0] === dirFile[0]) {
                console.log('saa')
                files_to_simulate.push(dirFile[0]);
            }
        })
    })
// If you want to have the result you need to call a function here
console.log(files_to_simulate)
});

Если вы хотите экспортировать, вам нужно это:

const fs = require('fs')
let folder = '../../importedFiles/data';
let files = fs.readdirSync(folder);
let fileSchema = require('../db/models/fileUpload');
// in the destination file just give it a callback
module.exports = function(callback){
let files_to_read = []
let files_to_simulate = [];

files.forEach(file => {
    let fileStat = fs.statSync(folder + '/' + file).isDirectory();
    if(!fileStat) {
        files_to_read.push(file);
    }
});

fileSchema.find({}, async function(err, files) {
    files.forEach(function(file) {
        files_to_read.forEach(function(directoryFile) {
            var dbFile = file.name.split('.');
            let dirFile = directoryFile.split('.');
            if (dbFile[0] === dirFile[0]) {
                console.log('saa')
                files_to_simulate.push(dirFile[0]);
            }
        })
    })
// If you want to have the result you need to call a function here
callback(files_to_simulate)
});
}

Здесь вы можете прочитать о Асинхронный в JavaScript

...