今天突然收到反馈说小程序端的二维码不显示了,排查发现报了下面的错误
搜索了一番,又对比了自己的代码,发现很多提到的解决方法都是说要在canvasToTempFilePath的第二个参数传入this(自定义组件实例),但我的代码已经是传有了的,另外还有说是要在 canvas 的 渲染函数 draw 中的回调函数,我也是这么做了,但为什么还是报这个错呢,而且这个问题并不是所有手机都存在这个问题,查找了半天,最后通过下面方式算是解决了:
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回调函数中增加setTimeout延迟时间,初步猜测是由于渲染完成了,但是canvas实例还没有导致的问题,不知道对不对,有理解的可以评论回复下。