У меня есть пара функций, которые я запускаю, чтобы загрузить zip-файл из Nexus, затем распаковать / распаковать содержимое zip-файла, и, наконец, выполнить поиск определенного c типа файла. Все функции работают, однако синхронный поиск по какой-то причине не дает никаких результатов. Если я просто запускаю функции загрузки и извлечения в 1 сценарии, а затем выполняю поиск в другом сценарии, я получаю ожидаемые результаты. Я почти уверен, что это происходит из-за синхронного поиска, в то время как загрузка и извлечение являются асин c. Есть ли быстрый способ добавить функцию поиска в конце после запуска функций загрузки и извлечения? Ниже приведен код:
//npm modules
const fs = require('fs-extra');
const download = require('download');
const unzipper = require('unzipper');
const path = require('path');
//Custom Variables
const artifact = 'SOME_FILE.zip';
const repo = "SOME NEXUS REPOSITORY";
const url = "http://SOME URL/repository/";
const directory = 'SOME DIRECTORY';
//Get Artifact and Extract it to local directory function
const getArtifact = async () => {
const getArtifact = await download(url+repo, "./unzip")
const file = await fs.writeFileSync(directory+artifact, await download(url+repo))
const readStream = await fs.createReadStream(directory + artifact).pipe(unzipper.Extract({path:
directory}))
}
//Find function which should run after download and extract have been fulfilled
const findFile = function (dir, pattern) {
var results = [];
fs.readdirSync(dir).forEach(function (dirInner) {
dirInner = path.resolve(dir, dirInner);
var stat = fs.statSync(dirInner);
console.log(stat)
if (stat.isDirectory()) {
results = results.concat(findFile(dirInner, pattern));
}
if (stat.isFile() && dirInner.endsWith(pattern)) {
results.push(dirInner);
}
});
console.log(results)
return results;
};
//clear contents of directory before new download and extract
fs.emptyDirSync(directory)
//call download and extract function
getArtifact()
Когда я запускаю "findFile" после загрузки и извлечения в отдельном скрипте, я получаю ожидаемый вывод массива. Однако, когда я пытаюсь включить (см. Ниже) это в тот же скрипт, я получаю пустой массив:
getArtifact().then(function findFile (dir, pattern) {
var results = [];
fs.readdirSync(directory).forEach(function (dirInner) {
dirInner = path.resolve(directory, dirInner);
var stat = fs.statSync(dirInner);
console.log(stat)
if (stat.isDirectory()) {
results = results.concat(findFile(dirInner, pattern))
if (stat.isFile() && dirInner.endsWith(pattern)) {
results.push(dirInner);
}
}
console.log(results)
return results;
})
})
//Output
[]
//If I try the following:
getArtifact().then(findFile(directory, file))
// I get same empty array
[]
//If I run "findFile" in its own script after the download extract I get the following:
[
'SOME_FILE_PATH\\document1',
'SOME_FILE_PATH\\document2',
'SOME_FILE_PATH\\document3',
'SOME_FILE_PATH\\document4',
'SOME_FILE_PATH\\document5',
'SOME_FILE_PATH\\document6',
'SOME_FILE_PATH\\document7
]
Любая помощь в том, как я могу включить мою функцию findFile в мою существующую функцию загрузки и извлечения, приветствуется ...