#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(), для которых используется консоль. войдите в .тогда() будет работать так, как вы хотите. Но поскольку у вас нет обещаний, то реализация внутри обратных вызовов и отключение асинхронности/ожидания (только для обещаний) — это правильный путь…. или обещайте все, если вы хотите этому научиться.