Мне нужно было сравнить два массива, первое из которых - пару имен файлов из базы данных, второе - список файлов, которые я уже загрузил моему клиенту. Идея заключалась в загрузке любых файлов, отсутствующих на клиенте. Поскольку чтение через fs
было два медленных, я пробовал использовать обещания, чтобы дождаться завершения одной функции до следующего запуска. Но почему-то я потерялся ... Мой код до сих пор:с использованием обещаний в node.js для создания и сравнения двух массивов
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»), но разница всегда пусто. Поэтому, может быть, я просто искалечил обещания, так как эта концепция для меня совершенно новая, и я знаю, что понимаю ее только половину.
Wow - это очень много - я пойду через них всех. Благодарю. Я знаю, что в кодексе есть некоторые недостатки, которые не связаны с обещаниями, но это в основном указать, что я пытался. Оригинальный фрагмент кода немного лучше и совсем другой (это всего лишь пример). – Torf