收藏
回答

关于异步接口draw

问题模块 框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 Bug draw 客户端 Android 6.67 2.1.0

使用场景

根据 canvas 进行裁剪 然后 使用draw 方法 回调函数 中 再调 canvasToTempFilePath api

生成 图片

模拟器 是正常的


是正常的

但是 在 真机中






代码 :

context.draw(false,function(){
   wx.canvasToTempFilePath({
        canvasId: 'canvas',
        success: function (res) {
          console.log(res)
          wx.getImageInfo({
            src: res.tempFilePath,
            success: function (res) {
              console.log(res)
            }
          })
          _this.page.setData({
            canvaResUrl: res.tempFilePath,
          })
        }
      }) 
})

问题是

真机生成的 图片 有的 时候正常 有的 时候不正常 模拟机 每次正常

最后 定位 到 draw 接口 是 异步的

在 回调 时 生成 图片 有问题 在 draw 回调 加了 一个 定时器

context.draw(false,function(){
setTimeout(function(){
        wx.canvasToTempFilePath({
          canvasId: 'canvas',
          success: function (res) {
            wx.getImageInfo({
              src: res.tempFilePath,
              success: function (res) {
                console.log(res)
              }
            })
            _this.page.setData({
              canvaResUrl: res.tempFilePath,
            })
          }
        })
      },1000)
})


疑问:

draw 中 回调 不是 在 绘制 完成 时 执行么

现在 加的 时间 是 1000ms 这个 时间 可能 和 设备 有关 这样 处理肯定 不好

还有 更好的 解决 办法么?


最后一次编辑于  2018-06-21
回答关注问题邀请回答
收藏

5 个回答

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    2018-06-21

    麻烦给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),我们定位下问题

    2018-06-21
    赞同
    回复 3
    • 刘乐
      刘乐
      2018-06-22


      模拟机 是正常的


      如果 把 setTimeout 时间 变小

      真机上


      裁剪 图片 就会 这样

      如果 把 时间 改成 1000ms 就 正常了

      我手机 是 华为的 ios 没测


      麻烦了哈


      2018-06-22
      回复
    • sweetyจุ๊บ
      sweetyจุ๊บ
      2018-07-05回复刘乐

      我也遇到了同样的问题,wx.draw不是成功回调才执行 wx.canvasToTempFilePath的吗?万一超过1秒还没有画完呢?

      2018-07-05
      回复
    • 刘乐
      刘乐
      2018-07-05回复sweetyจุ๊บ

      鬼知道,不知道 它异步 是 写在 哪了 感觉 不像是 写在 success 都不知道有 succes没

      是的 我现在 暂时 设置的 是 1s 不知道 怎么办

      2018-07-05
      回复
  • 企业名片
    企业名片
    01-10

    遇到同样问题,好郁闷啊,555555555

    01-10
    赞同
    回复
  • nicefeiniu🐂
    nicefeiniu🐂
    2018-08-29

    同样,这因该是图片还没画完,就调回调函数了。

    我也遇见这个问题,很奇怪。

    2018-08-29
    赞同
    回复 2
    • 刘乐
      刘乐
      2018-08-29

      问题坠机了,官方没理我,然后项目没继续了。

      你是怎么处理的?

      2018-08-29
      回复
    • nicefeiniu🐂
      nicefeiniu🐂
      2018-08-29

      只有setTimeout了,没办法了

      2018-08-29
      回复
  • sweetyจุ๊บ
    sweetyจุ๊บ
    2018-07-05

    我也遇到了同样的问题,wx.draw不是成功回调才执行wx.canvasToTempFilePath的吗?万一超过1秒还没有画完呢?

    2018-07-05
    赞同
    回复
  • 刘乐
    刘乐
    2018-06-22

    你好

    wechatide://minicode/DDwrAmmQ7wDt

    2018-06-22
    赞同
    回复