收藏
回答

请问这个promise怎么取不到返回值啊?

哪位高手救小弟一命,帮我看看drawFn()函数里 promise返回值怎么取不到呢?这是按钮点击时执行的代码,去调用 drawFn()。但在 drawFn().then 里,没法打印 “====压缩完后图片地址”。 有点特别的是drawFn()函数执行时调用了自己。

  licence_pic_get(event) {
    //从本地选多张图片
    wx.chooseImage({
      count: 9,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: res => {
        this.pageData.tempFilePath = res.tempFilePaths;
        this.pageData.compress_tempFilePath = [];
        this.pageData.index = 0;
        //调用函数,这里没能进入then打印结果,是为什么呢?
        this.drawFn().then(res_drawFn => {
          console.log('====压缩完后图片地址:', res_drawFn)
        })
      }
    })
  },
/////////////////
下面是调用的函数:
  drawFn: function () {
    let _this = this;
    return new Promise((resolve, reject) => {
      console.log('第' + _this.pageData.index + '次调用函数');
      if (_this.pageData.index < _this.pageData.tempFilePath.length) {
        ctx.drawImage(_this.pageData.tempFilePath[_this.pageData.index], 0, 0, 100, 100);
        ctx.draw(false, () => {
          console.log('第' + _this.pageData.index + '次draw');
          wx.canvasToTempFilePath({
            width: 100,
            height: 100,
            destWidth: 100,
            destHeight: 100,
            canvasId: 'compress',
            success: res_compress => {
              console.log('第' + _this.pageData.index + '次循环tempFilePath:', res_compress.tempFilePath);
              _this.pageData.compress_tempFilePath.push(res_compress.tempFilePath);
              _this.pageData.index++;
              _this.drawFn(); //调用自己
            }
          })
        })
      }
      else {
        console.log('调用完成compress_tempFilePath:', _this.pageData.compress_tempFilePath);
        resolve({
          compress_tempFilePath: _this.pageData.compress_tempFilePath,
        });
      }
    }) //promise end
  },

/////////////////
下面是打印结果:

没执行: this.drawFn().then(res_drawFn => {
          console.log('====压缩完后图片地址:', res_drawFn)
        })
最后一次编辑于  2020-01-17
回答关注问题邀请回答
收藏

2 个回答

  • dzk
    dzk
    2020-01-17

    我遇到过你这个问题:

    this.drawFn().then(res_drawFn => {
         console.log('====压缩完后图片地址:', res_drawFn)
    })
    


    前两次调用drawFn时候,你的函数不会返回一个promise对象,而是继续调用了自己,这个时候,你return的promise对象是新的promise对象了。所以就不会被你最上面初始调用时候的then捕获。

    你可以做个实验,把drawFn()里面改一改,让他不自己调用自己,直接resolve一个值,上面的then就会正常捕获。

    总结一下就是你这个自己调用的自己的操作有问题。

    2020-01-17
    有用 2
    回复 1
    • low B
      low B
      2020-01-17
      感谢,当时准备自己调用自己就心惊胆战的,太绕了,嘿嘿
      2020-01-17
      回复
  • 。。。。。。
    。。。。。。
    2020-01-17

    你那个调用自己的地方有问题,假如第一次符合if条件,你会一直处于pendding状态,出不来,所以什么也打印不出来(因为then没执行),

    可以在调用自己的地方加以下代码试试

    _this.drawFn().then(res => resolve());
    
    2020-01-17
    有用 1
    回复 2
    • low B
      low B
      2020-01-17
      我靠,真行了。非常感谢,这里自己调用自己把我搞晕了。
      2020-01-17
      回复
    • low B
      low B
      2020-01-17
      高手就是高手!!!
      2020-01-17
      回复
登录 后发表内容
问题标签