小程序用promise处理异步的问题

我的目的就是想把剪切板的内容放到textarea中 我觉得wx.getClipboardData这个方法应该是异步的 下面这样写一直都是空的 所以我用promise封装了一下 想在then中再赋值
但是我在then中处理this.setData时发现this.data.copy2还是空的 是我promise写的不对吗

<textarea maxlength="-1" value="{{copy}}"></textarea>
const app = getApp()

Page({
  data: {
    copy: '',
    copy2: ''
  },
  test () {
    wx.getClipboardData({
      success: function (res) {
        this.copy2 = res.data
      }
    })
    console.log(this.data.copy2) //一直都是空的
    this.setData({
      copy: this.data.copy2
    })
  },
  onLoad: function () {
    this.test()
  }
})

封装后

test () {
    return new Promise((resolve, reject)=>{
      wx.getClipboardData({
        success: function (res) {
          this.copy2 = res.data
          resolve()
        }
      })
    })
}
onLoad: function () {
    this.test().then(() => {
      console.log(this.data.copy2)
      this.setData({
        copy: this.data.copy2
      })
    })
}
阅读 872
评论 2019-05-26 提问
    5 个回答
    zzgzzg00
    • 2.5k

    test () {

    return new Promise((resolve, reject)=>{
      wx.getClipboardData({
        success: function (res) {
          resolve(res.data)
        }
      })
    })

    }
    onLoad: function () {

    this.test().then((data) => {
      this.setData({
        copy: data
      })
    })

    }

    评论 赞赏
      ever
      • 277

      emmmm,想说你为什么不直接在这里setData,这样不需要再封装一层promise

      test () {
          wx.getClipboardData({
            success: function (res) {
              this.setData({
                copy: res.data
              })
            }
          })
          
        }
      评论 赞赏

        this.setData 要写在 wx.getClipboardData 的 success 回调函数里

        评论 赞赏
          麦当苗儿
          • 2
          • 新人请关照

          我就想问你, success函数里面的 this.copy2 是什么鬼 ?

          评论 赞赏
            river
            • 2
            • 新人请关照
            评论 赞赏
              撰写回答

              登录后参与交流、获取后续更新提醒