javascript - 使用 JavaScript 中的异步函数和 promise 正确处理重型双 for 循环
问题描述
我是 JavaScript 中异步函数和承诺的新手。我想在显示其进度的同时逐步完成双 for 循环。到目前为止,我无法让它更新进度,而且似乎比我之前使用的香草双 for 循环花费了更多的时间,同时还很费力(我在这台 Mac 上得到了旋转的沙滩球)。它只显示最后的进度。
async function render(autoZoomAndPan) {
let zoom = setZoom * quality
for(var x=0; x < renderSize.w; x++){
for(var y=0; y < renderSize.h; y++){
await draw(x,y,zoom)
if(!autoZoomAndPan){
let allLoops = renderSize.w * renderSize.h
let currentLoops = x * y
var percent = (currentLoops / allLoops) * 100
document.getElementById('debug1').innerHTML ="<h3>Processed:" + percent + "%</h3>";
}
}
}
}
function draw(x,y,zoom){
return new Promise(resolve => {
var i = 0
var cx = -xCoord + x / zoom
var cy = -yCoord + y / zoom
var zx = 0
var zy = 0
do{
var xt = zx * zy;
zx = zx * zx - zy * zy + cx;
zy = zyMult * xt + cy;
i++;
}
while(i < (palletteSize - 1) && (zx * zx + zy * zy) < (pixelSize * quality));
context.beginPath();
context.fillStyle = pallette[i]
context.fillRect(x*pixelSize, y*pixelSize, pixelSize, pixelSize);
resolve('resolved');
})
}
render(false)
解决方案
推荐阅读
- c# - 如何避免“集合被修改;枚举操作可能无法执行”。在刷新 C# 图表期间?
- nestjs - 如何在 Nestjs 框架中使用 NgXs?
- django - 如何在 db 中没有 ForeignKey 的情况下执行 ManyToOne?
- firefox - 如何使用 wget 下载网站为其生成 url 的文件?
- go - 在 golang 中创建结构数组的映射?
- python - 无法从 beautifulsoup 中正确打印出组合表
- google-bigquery - 您好,BigQuery 是否支持物化视图?
- javascript - 如何在获胜后或直到猜测次数大于 9 时重置“您的猜测”部分?
- html - Net Beans IDE 无法启动我的本地主机
- javascript - 如何在反应中添加作用域css?