我一直在阅读有关Node JS中的异步和非阻塞IO的信息,我认为我会尝试写一些简单的东西。
加密功能仅代表一项非常漫长而艰巨的任务,可能需要花费大量时间。重要的是,for循环应保持完整无缺,因为update()
可以返回要处理的内容。
现在我遇到的问题是,进度更新只会在任务完成后一开始触发一次,然后在任务结束时触发一次:
Boop
Progress: 0
Progress: 99.99999000000001
我假设我只是将所有任务都阻塞了,那么如何确保其他任务可以运行,同时仍在处理大型任务?
const crypto = require("crypto");
var randomString = () => {
return crypto.randomBytes(100).toString('hex');
};
var progress = 0;
var going = true;
async function cb() {
const is = 1e7;
const hash = crypto.createHash('sha256');
const update = () => hash.update(randomString());
for (let i = 0; i < is; i++) {
await update();
progress = i / is * 100;
}
going = false;
return hash.digest('hex') + '\n';
};
setTimeout(cb, 0);
console.log("Boop");
function progUpdate() {
console.log("Progress: " + progress);
if (going) {
setTimeout(progUpdate, 100);
}
}
progUpdate();