v2.1.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()
})
})
}
- 新增 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)
}
}
}