0

我的目的就是想把剪切板的内容放到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
      })
    })
}
2019-05-26 提问
5 个回答
3

已采纳

test () {

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

}
onLoad: function () {

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

}

0

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

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

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

0

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

0

promise化所有的api

你可以这样写会好一点

撰写答案

推广链接