Мне нужно было сравнить два массива, первый из которых - пару имен файлов из базы данных, второй - список файлов, которые я уже загрузил на свой клиент. Идея заключалась в загрузке любых файлов, отсутствующих на клиенте.
Поскольку чтение через fs
было два медленных, я попытался использовать Promises, чтобы дождаться завершения одной функции до следующего запуска. Но почему-то я потерялся...
Мой код:
let filesIneed = [];
let filesIhave = [];
let filesToFetch = [];
getLocalFiles().then(getFilesIneed).then(getfilesToRetreive);
function getLocalFiles() {
fs.readdir(localPath, (err, files) => {
files.forEach(file => {
filesIhave.push(file)
});
})
return Promise.all(filesIhave);
}
function getFilesIneed () {
for (let x of docs) {//this is my JSON
filesIneed.push(y.NameOfFileIShouldHave);
}
}
return Promise.all(filesIneed);
}
function getfilesToRetreive() {
filesToFetch = _.difference(filesIneed, filesIhave);
return Promise.all(filesToFetch);
}
console.log(filesToFetch);
Я получаю первый и второй массив ( "filesIneed" и "filesIhave" ), но разница всегда пуста. Так что, может быть, я просто искалечил Promises, так как эта концепция для меня совершенно новая, и я знаю, что понимаю ее только половину.