小程序用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
      })
    })
}
阅读 4.3k
5 个回答

test () {

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

}
onLoad: function () {

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

}

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

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

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

新手上路,请多包涵

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题