uni.requestPayment的success里面不能调用其他函数吗?其他地方都可以通过this.recharge()调用,在uni.requestPayment里面使用报错,this也用不了。
requestPayment(params) {
uni.requestPayment({
nonceStr: params.nonceStr,
package: params.package,
paySign: params.paySign,
signType: params.signType,
timeStamp: params.timeStamp,
success(res) {
this.recharge()
uni.$showSuccMsg('支付成功!')
},
fail(err) {
uni.$showErrorMsg('支付失败!')
console.error('pay fail', err)
}
})
},
因为在这个success()中,this不是指向全局对象,而是指向umi对象。为了使用,需要改成:
requestPayment(params) {
const that = this; // 定义一个that,指向全局对象
uni.requestPayment({
nonceStr: params.nonceStr,
package: params.package,
paySign: params.paySign,
signType: params.signType,
timeStamp: params.timeStamp,
success(res) {
that.recharge() // 通过that调用全局对象上的recharge()方法
uni.$showSuccMsg('支付成功!')
},
fail(err) {
uni.$showErrorMsg('支付失败!')
console.error('pay fail', err)
}
})
},
感谢,之前不太理解const that = this的意义,学习到了。对箭头函数、this指向 也有更多的了解了
不知道你这个问题是否已经解决, 如果还没有解决的话:在小程序的success回调函数中无法直接调用其他函数的原因是,在该回调函数中调用的其他函数是在另一个作用域中执行的,而不是在界面页面的作用域中执行的。为了解决这个问题,我们可以使用uni.showModal函数在success回调函数中弹出一个提示框,提示用户支付成功。下面是具体的代码实现:
uni.requestPayment({
'provider': 'wxpay',
'timeStamp': timeStamp,
'nonceStr': nonceStr,
'package': wxPackage,
'signType': 'MD5',
'paySign': paySign,
'success': function(res) {
uni.showModal({
title: '支付成功',
content: '恭喜您,支付成功!',
showCancel: false,
success: function() {
// do something...
}
});
},
'fail': function(res) {
uni.showModal({
title: '支付失败',
content: '很遗憾,支付失败!',
showCancel: false,
success: function() {
// do something...
}
});
}
});
在上面的代码中,我们先调用uni.requestPayment函数来进行支付操作,在支付成功或失败的回调函数中分别调用uni.showModal函数来弹出提示框。在uni.showModal函数的success回调函数中,您可以根据需要执行一些其他操作。
为了让代码更加简洁和易读,还可以将弹窗函数封装成一个单独的函数,然后在uni.showModal函数的success回调函数中调用该函数实现提示用户支付成功。下面是相应的代码实现:
function showModal(title, content) {
uni.showModal({
title: title,
content: content,
showCancel: false,
success: function() {
// do something...
}
});
}
uni.requestPayment({
'provider': 'wxpay',
'timeStamp': timeStamp,
'nonceStr': nonceStr,
'package': wxPackage,
'signType': 'MD5',
'paySign': paySign,
'success': function(res) {
showModal('支付成功', '恭喜您,支付成功!');
},
'fail': function(res) {
showModal('支付失败', '很遗憾,支付失败!');
}
});
在上述代码中,我们定义了一个名为showModal的函数,该函数用于弹出提示框,接受两个参数,分别是提示框的标题和内容。然后我们在uni.requestPayment函数的回调函数中调用showModal函数来实现弹出提示框的功能,代码更加简洁、易读。