ae_ph
@ae_ph
I'm a owl )

Как вернуть результат из вложенной функции?

Помогите пожалуйста разобраться как вернуть результат из вложенной функции.
Я хотел бы вернуть прочитанные файлы переменной dateFiles.
Использую модуль glob.

const { src, dest, series } = require('gulp');
const glob = require("glob");
const fs = require('fs');

async function test1() {
    glob(__dirname + '/build/**/*.css', {}, (error, files) => {
        if (error) throw error;

        function readFiles() {
            let subarray = [];
            for (let name of files) {
                subarray = name.split();
                let globFile = subarray + '';
                let dateFiles = '';
                fs.readFile(globFile, "utf8",
                    function(error, data) {
                        if (error) throw error; 
                        // log('Асинхронное чтение файла');
                        // log(data); // выводим считанные данные
                        return dateFiles = data;
                    })
            }
        }
        readFiles();
        log(readFiles());
    })
}

exports.test1= series(test1);
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
glob - асинхронная функция. Соответственно, вызовы коллбэка происходят уже после завершения работы основной функции.
Можете использовать синхронный вариант glob.sync либо переписать код с использованием Promise и await.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@inFureal
const { src, dest, series } = require('gulp');
const glob = require("glob");
const fs = require('fs');

async function test1() {
    let res = null; // <===
    glob(__dirname + '/build/**/*.css', {}, (error, files) => {
        if (error) throw error;

        function readFiles() {
            let subarray = [];
            for (let name of files) {
                subarray = name.split();
                let globFile = subarray + '';
                let dateFiles = '';
                fs.readFile(globFile, "utf8",
                    function(error, data) {
                        if (error) throw error; 
                        res = data; // <===
                    })
            }
        }
        readFiles();
        log(readFiles());
    })
    return res; <===
}

exports.test1= series(test1);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы