Skip to content

v2.1.1

Compare
Choose a tag to compare
@youngjuning youngjuning released this 27 Apr 02:32
· 197 commits to master since this release
  1. 支持 ES2018 finaly 方法

核心代码:

Promise.prototype.finally = function (callback) {
  let P = this.constructor
  return this.then(
    value  => P.resolve(callback()).then(() => value),
    reason => P.resolve(callback()).then(() => { throw reason })
  )
}

使用方法:

方便之处在于,你不需要在 then,catch 中写两次 wx.hideLoading。这个也算是和 wx 原生的 complete 回调对应的方法。

getUserInfo (){
  wx.showLoading({
    title: '资料获取中...',
    mask: true
  })
  return new Promise((resolve, reject) =>{
    wx.pro.login().then(res => {
      // 发送 res.code 到后台换取 openId, sessionKey, unionId
      let code = res.code
      // 可以将 res 发送给后台解码出 unionId
      wx.pro.getUserInfo().then(res => {
        wx.pro.setStorage({
          key: 'userInfo',
          data: res.userInfo
        }).then(res => {
          console.log('存储用户信息成功!')
        }, err => {
          console.log('存储用户信息失败!')
        })
        // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
        // 所以此处加入 callback 以防止这种情况
        if (this.userInfoReadyCallback) {
          this.userInfoReadyCallback(res)
        }
      })
    }, err => {
      console.log('登录失败:',err)
    }).finally(() => {
      console.log('执行了finally!')
      wx.hideLoading()
    })
  })
}
  1. 新增 wx.pro.fillText 方法用于解决微信小程序 canvas 没有文本换行的问题

核心代码:

/**
 * 小程序 canvas 写字自动换行解决方案
 * @param  {[string]} text     [在画布上输出的文本]
 * @param  {[number]} x        [绘制文本的左上角x坐标位置]
 * @param  {[number]} y        [绘制文本的左上角y坐标位置]
 * @param  {[number]} column   [一行多少字]
 * @param  {[number]} maxWidth [需要绘制的最大宽度,可选]
 */
wx.pro.fillText = (canvasContext,text,x,y,column,maxWidth) => {
  let rows = 0
  if (text.length%column >0) {
    rows = parseInt(text.length/column)+1
  } else {
    rows = parseInt(text.length/column)
  }
  for (var i = 0; i < rows; i++) {
    let rowText = text.substring(i*column,i*column+column)
    if (maxWidth) {
      canvasContext.fillText(rowText,x,y+i*column,maxWidth)
    } else {
      canvasContext.fillText(rowText,x,y+i*column)
    }
  }
}