Как я могу заставить один блок кода с вложенными операторами if до fini sh перед последующим кодом в node.js? - PullRequest
0 голосов
/ 28 января 2020

В следующем блоке кода я хочу, чтобы все операторы ниже readdir выполнялись перед последним оператором, чтобы в финальный консольный журнал входила вся база данных. Я попытался запустить с readdir syn c, но это тоже не работает. Это как-то связано с вложенными операторами if? Последняя строка выполняется перед любым другим кодом, и я хотел бы обойти это.

// Load node.js filesystem module
var fs = require('fs');
// Load cheerio module for HTML scraping
const cheerio = require('cheerio');
// Load find and replace module
const replace = require('replace-in-file');
// Make for loop that cycles through all files in folder
var stream = fs.createWriteStream("my_file.txt");

var database = {};

const CurrentFolder = './';
fs.readdir(CurrentFolder, (err, files) => {
    files.forEach(file => {
        // only modify files that contain 'page' and end in .html
        if (file.includes('.html')) {
            if (file.includes('page')) {
                console.log(file + ' includes html');
                fs.readFile(file, 'utf8', function (err, contents) {
                    if (err) console.log('ERROR: ' + err);
                    // only modify files that contain a '.page-title-lvl-cover' heading
                    if (contents.includes('page-title-lvl-cover')) {
                        var x = contents;
                        // console.log(x);
                        const $ = cheerio.load(contents)
                        // Extract page title (found within page-title-lvl-cover class)
                        const result = $('.page-title-lvl-cover').text()



                        database[file] = result;

                        console.log(database);

                        console.log(result)


                    }
                });
            }
        }
    });
});
console.log('Last ' + database)

1 Ответ

0 голосов
/ 28 января 2020

Просто сделайте все синхронизировать, включая readdir и readFile.

// Load node.js filesystem module
var fs = require('fs');
// Load cheerio module for HTML scraping
const cheerio = require('cheerio');
// Load find and replace module
const replace = require('replace-in-file');
// Make for loop that cycles through all files in folder
var stream = fs.createWriteStream("my_file.txt");

var database = {};

const CurrentFolder = './';
const files = fs.readdirSync(CurrentFolder);
files.forEach(file => {
    // only modify files that contain 'page' and end in .html
    if (file.includes('.html')) {
        if (file.includes('page')) {
            console.log(file + ' includes html');
            const contents = fs.readFileSync(file, 'utf8');
            // only modify files that contain a '.page-title-lvl-cover' heading
            if (contents.includes('page-title-lvl-cover')) {
                var x = contents;
                // console.log(x);
                const $ = cheerio.load(contents)
                // Extract page title (found within page-title-lvl-cover class)
                const result = $('.page-title-lvl-cover').text()
                database[file] = result;
                console.log(database);
                console.log(result)
            }
        }
    }
});
console.log('Last ' + database)
...