今天突然收到反饋說小程序端的二維碼不顯示了哮翘,排查發(fā)現(xiàn)報(bào)了下面的錯(cuò)誤
image.png
搜索了一番,又對(duì)比了自己的代碼阻课,發(fā)現(xiàn)很多提到的解決方法都是說要在canvasToTempFilePath的第二個(gè)參數(shù)傳入this(自定義組件實(shí)例)艰匙,但我的代碼已經(jīng)是傳有了的,另外還有說是要在 canvas 的 渲染函數(shù) draw 中的回調(diào)函數(shù)署驻,我也是這么做了,但為什么還是報(bào)這個(gè)錯(cuò)呢瓶蚂,而且這個(gè)問題并不是所有手機(jī)都存在這個(gè)問題抚官,查找了半天,最后通過下面方式算是解決了:
setTimeout(() => {
ctx.draw(false, setTimeout(() => {
uni.canvasToTempFilePath({
canvasId: this.cid,
success: res => {
options.success && options.success(res.tempFilePath)
},
fail: error => {
options.fail && options.fail(error)
}
}, this)
},300))
}, 200)
就是在draw外面和draw回調(diào)函數(shù)中增加setTimeout延遲時(shí)間钦听,初步猜測(cè)是由于渲染完成了倍奢,但是canvas實(shí)例還沒有導(dǎo)致的問題卒煞,不知道對(duì)不對(duì),有理解的可以評(píng)論回復(fù)下衣撬。