钱端攻城狮. 2023-04-18 17:30 采纳率: 50%
浏览 18
已结题

uni.requestPayment的success里面不能调用其他函数吗?


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)
    }
  })
},

  • 写回答

3条回答 默认 最新

  • 乘风xs 2023-04-18 18:05
    关注

    因为在这个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)
        }
      })
    },
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 钱端攻城狮. 2023-04-19 08:37
    关注

    感谢,之前不太理解const that = this的意义,学习到了。对箭头函数、this指向 也有更多的了解了

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-22 09:01
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      在小程序的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函数来实现弹出提示框的功能,代码更加简洁、易读。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月18日

悬赏问题

  • ¥20 关于#javascript#的问题:但是我写的只能接码数字和字符,帮我写一个解码JS问题
  • ¥15 prophet运行报错,如何解决?
  • ¥20 前端数据是从session等作用域拿到的,如何取值继续传递后端呢
  • ¥15 eclipse无法正常运行
  • ¥15 定义了函数,但是无法根据函数定义触发器
  • ¥20 5变量卡诺图化简得出与非门电路图
  • ¥15 Python爬取交通拥堵指数数据
  • ¥15 使用vba抓取重定向网页问题
  • ¥20 付费需求测试程序(细谈)。
  • ¥15 为什么这段c++代码会报这么多语法错误?