我尝试使用 fetch 和 async/await 加载图像并将其显示在画布上,但它不起作用。图像未在画布上绘制。它正确加载到 HTML 中的 img 元素中。在画布上,如果我将绘图代码包装在 setTimeout 中,它可以工作,但我不想这样做。
有没有办法使用等待加载图像并在没有 setTimeout 的情况下在画布上绘制和绘制?
这是代码:
async function loadImage(url) {
let response = await fetch(url);
let blob = await response.blob();
return URL.createObjectURL(blob);
}
let canvas = document.body.querySelector("canvas");
let ctx = canvas.getContext("2d");
let tileURL = loadImage("https://avatars.githubusercontent.com/u/92330684?s=120&v=4").then((tileURL) => {
// Displaying image element in HTML works.
let img = document.body.querySelector("img");
img.src = tileURL;
// Displaying the image immediately in canvas doesn't work.
ctx.drawImage(img, 0, 0);
// But it works if I add some delay.
setTimeout(() => {
ctx.drawImage(img, 100, 0);
}, 3000); // 3 second delay.
});
canvas {
border: 1px solid #000;
}
<canvas></canvas>
<img>