gpt4 book ai didi

node.js - 在 Node.js 中使用 Promise 创建并比较两个数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:55 24 4
gpt4 key购买 nike

我需要比较两个数组,第一个数组是数据库中的几个文件名,第二个数组是我已经下载到客户端的文件列表。这个想法是加载客户端上缺少的任何文件。由于通过 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”),但差异始终为空。所以也许我只是搞砸了 promise ,因为这个概念对我来说是全新的,而且我知道我只理解了一半。

最佳答案

这是完全错误的。您无法对文件名数组运行 Promise.all。您只能在一系列 promise 上运行它。

当您已经拥有该数组时,也无需将数组的每个元素一次一个地推送到空数组中以返回该数组。

您不能使用 Promise 来比较两个数组。您可以使用 lodash 比较 Promise 的 then 处理程序中的两个数组,该处理程序解析为数组。

如果您想从 fs.readdir 获得文件名的 promise ,请使用以下模块之一:

也不要对所有内容都使用全局变量,因为任何并发都会遇到问题。

此外,了解 Promise。如果不了解 Promise 的工作原理,您将无法猜测使用它们的正确方法。即使查看一些工作代码示例也会有很大帮助,并且 Stack Overflow 上有很多关于 Promise 的问题和答案:

关于node.js - 在 Node.js 中使用 Promise 创建并比较两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com