Мой код ожидания не ждет, пока мой код продолжится

#javascript #node.js #glob

Вопрос:

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

 const glob = require("glob");

var allfiles = [];

inicio();

async function inicio() {
    await gerall();

    console.log(allfiles);
}

async function gerall() {
    var getDirectories = function(src, callback) {
        glob(src   '/**/*', callback);
    };
    await getDirectories('./', function(err, res) {
        if (err) {
            console.log('Error', err);
        } else {
            res.forEach(element => {
                if (!element.includes("node_module") amp;amp;
                    !element.includes("package.json") amp;amp;
                    !element.includes("package-lock.json") amp;amp;
                    element.substring(1).includes(".")) {
                    allfiles.push(element);

                }
            });

        }
    })


}
 

Кто-нибудь может мне помочь?

извините за мой английский.

Комментарии:

1. getDirectories() не возвращает обещание и не ждет обратного вызова.

2. Вы не можете использовать await функцию, которая принимает обратный вызов. Вы можете использовать promisify , чтобы обернуть getDirectories , чтобы вернуть обещание вокруг традиционного (err, результата) обратного вызова.

Ответ №1:

удалите ожидание в каталогах GET, потому что это не функция, возвращающая обещание. Это стиль обратного вызова, и полученный код после этого будет выполняться только после завершения GetDirectories.

Комментарии:

1. привет, G-Force, я исправил это, но моя проблема в функции inicio, потому что даже при использовании функции await она не ожидает регистрации выполнения.

2. Неважно, это решено, я собираюсь выполнить код в функции GetDirectories, это простой код.

3. функция inicio не будет ждать. Если бы у вас был код на основе обещаний, вы могли бы «дождаться» gerall(), за которым следуют .then() и .catch(), для которых используется консоль. войдите в .тогда() будет работать так, как вы хотите. Но поскольку у вас нет обещаний, то реализация внутри обратных вызовов и отключение асинхронности/ожидания (только для обещаний) — это правильный путь…. или обещайте все, если вы хотите этому научиться.