微信小程序等待wx.requestPayment的回调函数执行完后再执行后续代码

这篇具有很好参考价值的文章主要介绍了微信小程序等待wx.requestPayment的回调函数执行完后再执行后续代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

async/await & Promise的再认识

背景

在开发微信小程序过程中,遇到如下需求:

需要等待wx.requestPayment的回调函数执行完后再执行后续代码

这是因为在调用wx.requestPayment之后,会弹出一个支付弹窗,如果此时点击右上角的x,那么将会执行wx.requestPayment的回调函数fail中的代码。而由于wx.requestPayment的回调函数是异步执行的,所以程序会继续跑下去执行后面的代码。这会出现什么问题呢?

async fabu(){
    const res = await wx.requestPayment({
      ...params,
      success: function (res) {
        console.log('Payment success');
        //...(假设这里是支付成功后的代码)
      },
      fail: function (error) {
        console.log('Payment failed', error);
      }
    });
    //...(假设这里是支付成功后的代码)
}

1.如果我把支付成功后的代码写到wx.requestPayment的后面,那么在我点击了右上角的x后,程序会执行后续的代码,导致我明明没有支付却执行了支付成功的代码。

2.如果我把支付成功后的代码写到wx.requestPayment的回调函数(succes)里,那么会出现:在弹出弹窗等待用户进行支付操作之后,程序会继续执行wx.requestPayment后面的代码的现象,这会导致用户未完成支付操作,fabu()这个函数就已经执行完并返回结果了。

Solution

由于wx.requestPayment的回调函数是异步执行的,而且微信开发者工具不支持直接使用async/await等待回调函数的执行完成,所以无法直接通过在wx.requestPayment前加上await来等待回调函数执行完毕。

不过,可以使用Promiseresolve来手动实现等待回调函数执行完毕后再执行后续代码的效果。

async doPayment(params) {
    let that = this;
    try {
      const paymentResult = await new Promise((resolve, reject) => {
        wx.requestPayment({
          ...params,
          success: function (res) {
            console.log('Payment success');
            resolve(res); // 在成功回调函数中手动触发resolve,并传递回调数据
          },
          fail: function (error) {
            //如果不是耗时处理,处理支付失败的情况可以写在这
            console.log('Payment failed in', error);
            reject(error); // 在失败回调函数中手动触发reject,并传递错误信息
          }
        });
      });
      console.log('Continue with the next steps');
      // 在这里可以执行支付成功后的代码
    } catch (error) {
      //如果是耗时处理,处理支付失败的情况可以写在这
      console.log('Payment failed out', error);
    }
    console.log('这里是try catch块后面的代码');
  },

这里我们在doPayment函数中使用await new Promise来等待wx.requestPayment的完成,并获取支付结果。在成功情况下,输出"Payment success",然后可以执行后续代码。在失败情况下,输出"Payment failed"并打印错误信息,可以在catch块中处理支付失败的情况。

这样我们就能做到等待wx.requestPayment的回调函数执行完后再执行后续代码,如图所示:

微信小程序等待wx.requestPayment的回调函数执行完后再执行后续代码,微信小程序,javascript,微信小程序,javascript文章来源地址https://www.toymoban.com/news/detail-704198.html

到了这里,关于微信小程序等待wx.requestPayment的回调函数执行完后再执行后续代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序wx.requestPayment报错/无响应信息梳理

    大风起兮云飞扬,安得猛士兮走四方,BUG,任何时候都要改,不改不行,你想想,你自己一个人,下了班,吃着火锅还唱着歌,突然支付就不能用了! 本文整理了关于微信小程序wx.requestPayment的报错或无响应的问题。报错信息与回答多整理于[微信开发社区],本文仅做整理。

    2024年02月09日
    浏览(36)
  • 微信小程序-虚拟支付:适用场景 / iPhone调试用支付成功,Android调用失败,提示“小程序支付能力已被限制” / “errMsg“.“requestPayment:fail banned”

    一、官方文档 wx.requestVirtualPayment(Object object) | 微信开放文档 二、微信wx.requestVirtualPayment虚拟支付主要适用于以下场景 1. 虚拟商品购买:如游戏内虚拟道具、游戏点卡、虚拟礼物等,用户可以直接通过微信虚拟支付完成支付。 2. 虚拟货币充值:如游戏币、积分、红包余额等,

    2024年02月06日
    浏览(62)
  • 微信小程序 wx.showModal

    微信小程序--wx.showModal_海轰Pro的博客-CSDN博客

    2024年02月15日
    浏览(50)
  • 解决微信小程序回调地狱问题

    一、背景     小程序开发经常遇到根据网络请求结果,然后继续 处理下一步业务操作,代码如下: 这段代特点:层层嵌套,逻辑负责可读性低,不易维护。解决方案使用 new Promise((resolve, reject) = {})可使用异步顺序执行来解决。 二、代码示例 第一个请求函数代码示例 第

    2024年02月09日
    浏览(52)
  • 微信小程序-登录(wx.login)

    用户微信登录小程序有两种情况,分别为弹出登录提示和不弹出登录提示两种。弹出登录提示的情况下,用户确定后会向后台传入更多参数,例如用户昵称等。不弹出登录提示只能获取到用户的临时登录凭证code。主要根据第二种情况进行描述。 这个code具有时效性,能用于区

    2024年02月15日
    浏览(50)
  • 微信小程序 wx:if使用

    在微信小程序中,可以使用 wx:if 指令来控制某个元素是否需要被渲染到页面上。根据条件表达式的结果, wx:if 指令决定元素是否显示。 下面是使用 wx:if 的基本示例: 在上述代码中, wx:if 指令的值为一个条件表达式 {{condition}} ,根据该条件表达式的结果决定是否渲染 view 元

    2024年02月09日
    浏览(50)
  • 微信小程序本地存储(wx.setStorage)和(wx.setStorageSync)

     在微信小程序中,可以使用本地存储来保存一些数据比如用户状态,姓名,性别等; 本地存储主要包括两种方式:缓存和本地数据存储。 缓存 缓存是一种快速访问内存的临时存储机制,可以有效地提高应用程序的响应速度。在微信小程序中,可以使用 wx.setStorage 方法和

    2023年04月18日
    浏览(96)
  • APP 跳转微信小程序和回调

    在同一开放平台账号下的移动应用及小程序无需关联即可完成跳转,非同一开放平台账号下的小程序需与移动应用(APP)成功关联后才支持跳转。 可在“管理中心-移动应用-应用详情-关联小程序信息”,为通过审核的移动应用发起关联小程序操作。 App打开下程序有两种方式

    2023年04月09日
    浏览(64)
  • 微信小程序如何实现兼容----wx.getSystemInfoSync、 wx.getSystemInfo、wx.canIUse

    小程序的宿主环境一直在迭代更新,提供更多的能力给开发者去完成更多的事情,所以你的小程序会运行在不同版本的宿主环境下。为了让你的小程序在不同环境下都能提供相应的服务,我们需要来了解一下在小程序中如何实现兼容办法。 1.针对不同手机进行程序上的兼容

    2024年02月09日
    浏览(49)
  • 微信小程序wx:for 的使用以及wx:key绑定

    wx:for基本使用 wx:for-item和wx:for-index重新命名item和index wx:key两种绑定方式以及注意事项 wx:for基本使用 业务层数据 视图层 wx:for遍历时候每一项名称为 item 每一项索引名称为 index wx:for-item和wx:for-index实现item和index重命名 wx:for-item=\\\"str\\\" 将原来名称 item 修改成 str wx:for-index=\\\"i 将原来

    2024年02月11日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包