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

news2024/9/21 18:39:25

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的回调函数执行完后再执行后续代码,如图所示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从ChatGPT到大模型

AIGC AIGC1. 关于ChatGPT2. 关于大模型模型即服务。现在大模型的两种:大模型发展趋势:大模型作用:大模型核心: 3. 要复现一个ChatGPT需要的资源支持?4. ChatGPT的局限性5. 类ChatGPT 未来的发展ChatGPT 体现的通用性&…

Java从高德地图获取全国地铁站数据

Java从高德地图获取全国地铁站数据。 数据来源(高德地图):http://map.amap.com/subway/index.html?&4401 采集代码 /*** 从高德地图地铁线路同步全国地铁站数据(非必要不调用)* 数据来源:http://ma…

【电厂用 JL-8D/3X2定时限电流继电器 复合继电器 功耗低 JOSEF约瑟】

JL-8D/3X2定时限电流继电器名称;定时限电流继电器型号:JL-8D/3X2触点容量250V5A功率消耗<5W返回系数0.90.97整定范围0.039.9A;0.130A辅助电源24220VDC/AC 系列型号: JL-8D/3X1定时限电流继电器; JL-8D/3X111A2定时限电流继电器&#xff1b…

深度操作系统 deepin V23 Beta 发布

深度操作系统 deepin V23 发布了首个 Beta 版本。 公告写道,它是 V23 Alpha 版本的一次升级,但不建议用于生产环境。作为一个专注于用户体验的系统,Deepin v23 beta 版本引入了许多新的特性,包括 DDE 新变化、终端、跨版本升级以…

Agilent安捷伦33522B任意波形发生器

Agilent安捷伦33522B任意波形发生器30兆赫 2通道 为您最苛刻的测量生成全方位信号的无与伦比的能力 具有 5 倍低谐波失真的正弦波,可提供更纯净的信号 脉冲频率高达 30 MHz,抖动减少 10 倍,可实现更精确的计时 具有排序功能的逐点任意波形功能…

Notepad++ 添加自定义右键菜单项

目录 1. 背景 020.添加右键菜单项 - “打开至” 030.添加右键菜单项 - “复制到剪切板” 效果图: 1. 背景 笔记本上使用Notepad,会因为存在标签栏,导致窗口能显示的行数减少。 去除标签栏后,又无法操作一些右键菜单。 转而开…

掌握企业核心:工商详细信息API 60多项全维度信息解读

引言 在当今竞争激烈的商业环境中,了解和评估企业的工商注册信息变得至关重要。无论是与供应商合作、寻找合作伙伴,还是进行市场调研和背景调查,我们都需要准确和全面的企业工商信息来做出明智的决策。但是,获取这些信息往往是一…

SpringBoot的常见配置

SpringBoot基础配置 1. 配置文件格式问题导入1.1 修改服务器端口1.2 自动提示功能消失解决方案1.3 SpringBoot配置文件加载顺序 2. yaml问题导入2.1 yaml语法规则2.2 yaml数组数据2.3 yaml数据读取 3. 多环境开发配置问题导入3.1 多环境启动配置3.2 多环境启动命令格式3.3 多环…

CloudCompare二次开发之如何通过PCL进行点云分割?

文章目录 0.引言1.CloudCompare界面设计配准(segment)按钮2.欧式聚类分割(Euclidean_Seg)3.基于区域生长的分割(Region_Seg) 0.引言 因笔者课题涉及点云处理,需要通过PCL进行点云数据一系列处理分析,查阅现…

【漏洞预警】泛微E-Cology ofsLogin任意用户登陆漏洞

泛微ofsLogin任意用户登陆漏洞 漏洞描述 泛微e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 泛微e-cology前台任意用户登录漏洞:…

Git 代码分支管理 | 京东云技术团队

作者:京东科技 周新智 一、引言 近日,IoT 研发团队加入了不少新同学,对 git 分支的命名和管理方式有些许的模糊,分支的命名规范以及管理方式对项目的版本发布至关重要,为了解决实际开发过程中版本发布时代码管理混乱…

大模型高效调参—PEFT库( Parameter-Efficient Fine-Tuning)

介绍 在面对特定的下游任务时,如果进行Full FineTuning(即对预训练模型中的所有参数都进行微调),太过低效;而如果采用固定预训练模型的某些层,只微调接近下游任务的那几层参数,又难以达到较好的…

Java 8 腰斩!Java 17 暴涨 430%!!

前言 New Relic 最新发布了一份 “2023 年 Java 生态系统状况报告”,旨在提供有关当今 Java 生态系统状态的背景和见解。该报告基于从数百万个提供性能数据的应用程序中收集的数据,对生产中使用最多的版本、最受欢迎的 JDK 供应商、容器的兴起等多方面进…

数据链路层讲解

目录 一、数据链路层解决的问题 二、以太网协议 2.1 认识以太网 2.2 以太网帧格式 2.3 MAC地址 2.3.1 认识MAC地址 2.3.2 对比MAC地址和IP地址 2.4 MTU 2.4.1 认识MTU 2.4.2 MUT对IP协议的影响 2.4.3 MTU对UDP协议的影响 2.4.4 MTU对TCP协议的影响 2.5 数据跨网络…

什么是npu算力盒子,算力是越大越好吗?

一、什么是npu算力盒子?该怎么选? NPU(神经处理单元)算力盒子是一种专门用于进行人工智能计算的硬件设备,其中集成了高性能的NPU芯片。NPU是一种针对深度学习任务进行优化的处理器,具备高度并行计算和低功…

MySQL高级_第07章_InnoDB数据存储结构

MySQL高级_第07章_InnoDB数据存储结构 1.数据库的存储结构:页 索引结构给我们提供了高效的索引万式,不过索引信息以及数据记录都是保存在文件上的, 确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责…

文章生成器-原创文章生成器

在网络营销领域,优质文章是吸引新客户和保留老客户的重要工具。然而,生成高质量且符合SEO优化的文章并不是一件容易的事情。这就是为什么网站文章生成器如今备受欢迎的原因。而在众多的文章生成工具中,147GPT批量生成文章软件是一款非常出色的…

apache doris自定义udf函数

环境准备 下载(https://doris.apache.org/zh-CN/download) 上传文件到节点,并解压 apache-doris-fe-1.2.4.1-bin-x86_64.tar.xzapache-doris-be-1.2.4.1-bin-x86_64-noavx2.tar.xzapache-doris-dependencies-1.2.4.1-bin-x86_64.tar.xz部署 官方部署文档(本文的端口均有修…

如何将 Confluence 数据自助迁移至 ONES|软件国产化替代

近日,ONES 升级了 Confluence 自助迁移工具,对迁移数据类型、迁移范围、迁移模式等多个维度的能力进行了提升,帮助企业更高效率、更低成本地将 Confluence 中的数据完整、准确地迁移至 ONES Wiki 中。 在 Confluence 与 ONES 服务资源充足的…

win下C++通过Clion部署yolov5——libtorch+yolov5

libtorchyolov5 一、环境配置二、下载官网例子三、测试3.1、创建项目3.2、cmakelist.txt编写3.3、运行测试 一、环境配置 需要配置libtorchOpenCV,此处参考博文:clion配置libtorchOpenCV环境配置。 环境解决后即可开始下一步啦。 二、下载官网例子 下…