【发布时间】:2020-07-04 17:06:18
【问题描述】:
有一个包含一些图片网址的数组。
const imgs = [{
src:'./canvas-img1.jpg',
pos: 20
}, {
src: './canvas-img2.jpeg',
pos: 25
}]
我试图在我的应用程序中加载这些图像一次,然后将它们存储为缓存以供将来使用,这样我就不必一次又一次地加载它们。我正在使用这些图像在画布上绘制它们。我正在执行以下步骤。
- 我发起了一个 Promise 来加载所有图像。 Promise 加载图像并将它们存储到数组中。
- 承诺解决后,我将它们绘制在画布上
这是我的代码
drawCanvas(){
let canvas = document.getElementById("timeline-canvas")
let canvas_container = document.getElementById("canvas-container")
let ctx = canvas.getContext("2d")
this.loadImage().then((can_imgs)=>{
console.log(can_imgs.length) // this is coming as array of length 0
this.state.can_imgs.map((item, i)=>{
let x = (item.pos * window.innerWidth)/100
ctx.drawImage(item.img, x,0, 100, 100);
})
})
ctx.save()
}
//load images only once and cache them
loadImage = () => {
return new Promise(resolve => {
imgs.map((item, i)=>{
let img1 = new Image()
img1.src = item.src
let x = (item.pos * window.innerWidth)/100
img1.onload = function (e)
{
can_imgs.push({img: img1, pos: item.pos})
}
})
this.setState({can_imgs: can_imgs}, ()=>{
resolve(can_imgs)
})
})
}
但是当我在“then”中控制台“can_imgs.length”时,控制台为零。它应该是长度为 2 的数组。我做错了什么?
【问题讨论】:
标签: javascript promise es6-promise