JavaScript Promise 返回数组问题怎么显示undefined呢?

作者站长头像
站长
· 阅读数 6

js Promise 返回数组但无法使用

该如何返回结果呢?

let element = document.querySelectorAll('.test')
    let promise = new Promise((resolve,reject) => {
        let imgs = []
            for (var i = 0; i < element.length; i++) {
                html2canvas(element[i],{
                    useCORS: true,
                    allowTaint: false,
                    logging: true
                }).then(function(canvas) {
                    let ctx = canvas.getContext("2d")
                    let page = document.createElement("canvas")
                    page.width = canvas.width
                    page.height = canvas.height
                    page.getContext("2d").putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0)
                    imgs.push(page.toDataURL("image/jpeg", 1.0))
                })
            }
            console.log(imgs,imgs.length)
            resolve(imgs)
        })
    promise.then(e => {
            console.log(e, e.length)
    })

在这里打印e,可以看到是个数组,但e.length显示就是0;而且直接使用e[0]就是undefined

回复
1个回答
avatar
test
2024-06-21

resolve(imgs)修改为

if (imgs.length === element.length) {
   resolve(imgs);
 }

并移动到 imgs.push(page.toDataURL("image/jpeg", 1.0)) 后面

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容