【发布时间】:2021-06-04 15:28:24
【问题描述】:
我仍然无法掌握如何解决这个问题。我尝试了How do I add a delay in a JavaScript loop? 中给出的解决方案,据说这些解决方案可以解决我的问题,但它们对我没有用。
要么我得到我尝试过的相同的东西(一个运行一次但不能解决我的问题的等待功能)。或者在运行脚本时,脚本在 cli 和我希望将结果写入的 Result.txt 文件中都没有输出。
var path = require('path');
var fs = require('fs');
var VirusTotalApi = require("virustotal-api");
var virusTotal = new VirusTotalApi('<YOUR API KEY>');
fs.readdir('/home/username/Desktop/TEST/', function (err,files) {
if (err) {
return console.log('Unable to scan directory: ' +err);
}
files.forEach(function (file) {
var directoryPath = path.join('/home/username/Desktop/TEST/', file);
fs.readFile(directoryPath, (err, data) => {
if (err) {
console.log(`Cannot read file. ${err}`);
} else {
console.log(file);
virusTotal
.fileScan(data, `${file}`)
.then(response => {
let resource = response.resource;
virusTotal.fileReport(resource).then(result => {
fs.writeFile('Result.txt', `${file}: ` + JSON.stringify(result, ["verbose_msg","total","positives"]) + '\n', function (err) {
if (err) throw err;
if(!err) {
console.log(`${file}: Saved!`);
}
});
});
})
.catch(err => console.log(`Scan failed. ${err}`));
if(!err) {
console.log('Scan succesful');
}
}
});
});
});
再一次,我需要一个等待 20 秒的 ForEach 循环,然后运行所需的代码。在进入下一个 for 条件之前,它还需要等待。
【问题讨论】:
-
等待时间正好 20 秒 的原因是什么?您是否正在等待所需的操作发生并假设需要 20 秒?
-
鹿深,是的。正如我在第一个问题 (stackoverflow.com/questions/67838518/foreach-async-js) 中提到的那样,该问题已过早关闭,免费 API 密钥的限制是每分钟 4 个文件扫描。所以,我需要做一个等待 20 秒的 ForEach 循环,然后运行所需的代码。实际上,我发现上传部分可以同时运行,无需在文件之间等待。我可以推送 xy 文件进行扫描,我有一个脚本可以做到这一点。然后它等待 100 秒,但这只是因为如果我立即请求结果,我只会得到“您的资源已排队等待分析”。
-
请求结果部分是限制每分钟可以运行多少次的部分。如果我运行它太快,我会得到一个错误。因此,需要 20 秒,即更新为 30 秒,现在就像一个魅力。
标签: javascript node.js for-loop