JS异步操作

点击按钮触发onScan函数,函数调用扫描二维码这个异步操作后,需要扫描二维码的函数返回结果,可以用Promise来实现。Promise对象状态变为resolved(成功)或rejected(失败),然后将解决(或拒绝)的值作为表达式的结果返回。

scanQrCode: function()
{return new Promise((resolve, reject) => {					uni.scanCode({onlyFromCamera: true,scanType: ['qrCode'],success: function (res) {console.log('条码类型:' + res.scanType);console.log('条码内容:' + res.result);resolve(res.result)},fail: function(){reject('fail')}});});
},
onScan: function()
{this.scanQrCode().then((arrRtn) => {console.log('arrRtn = ', arrRtn)}).catch(error => {console.error('error = ', error);// 处理错误})
},

而如果点击按钮后,执行的onScan函数不能立即调用扫描二维码这个异步操作,而是弹出一个选择框(确定和取消),点击确定才能调用扫描二维码,相当于异步函数里调用异步函数。这时候可以用 async/await 结合Promise对象的方式。await是JavaScript中用于等待一个Promise对象执行完成并返回结果的关键字。当在一个使用async修饰的函数中使用await关键字时,它会暂停函数的执行,直到该Promise对象状态变为resolved(成功)或rejected(失败),然后将解决(或拒绝)的值作为表达式的结果返回。

scanQrCode: function()
{return new Promise((resolve, reject) => {					uni.scanCode({onlyFromCamera: true,scanType: ['qrCode'],success: function (res) {console.log('条码类型:' + res.scanType);console.log('条码内容:' + res.result);resolve(res.result)},fail: function(){reject('fail')}});});
},onScan: function ()
{let that = thisuni.showModal({title: '提示标题',content: '提示内容',showCancel: true,cancelText: '取消',confirmText: '确定',success: async (res) =>{if (res.confirm) {console.log('用户点击确定按钮')const scanRes = await that.scanQrCode()console.log('scanRes = ', scanRes)} else if (res.cancel) {console.log('用户点击取消按钮')}}})
},

上面这种async/await的写法,也可以改用.then()来实现

scanQrCode: function()
{return new Promise((resolve, reject) => {					uni.scanCode({onlyFromCamera: true,scanType: ['qrCode'],success: function (res) {console.log('条码类型:' + res.scanType);console.log('条码内容:' + res.result);resolve(res.result)},fail: function(){reject('fail')}});});
},onScan: function ()
{let that = thisuni.showModal({title: '提示标题',content: '提示内容',showCancel: true,cancelText: '取消',confirmText: '确定',success: (res) => {if (res.confirm) {that.scanQrCode().then(scanRes => {console.log('用户点击确定按钮');console.log('scanRes = ', scanRes);				                }).catch(error => {console.error('扫描错误:', error);});} else if (res.cancel) {console.log('用户点击取消按钮');}}});
},

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

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

相关文章

运放PSRR与开关电源纹波分析的实际案例分享!

本文来自看海原创视频教程:《运放秘籍》运算放大器基础精讲及应用第一部*开天 微信公众号:工程师看海 【淘宝】https://m.tb.cn/h.5PAjLi7?tkvmMLW43KO7q CZ3457 「运放秘籍_运算放大器Multisim仿真视频教程第一部开天_工程师看海」 点击链接直接打开 …

前端逻辑错误或UI崩溃解决问题

全屏错误覆盖层或UI崩溃 VueReact(错误边界) Vue Vue的全屏错误覆盖层解决,其实只需要配置Error就好,在开发服务器的client.overlay中设置关闭全屏覆盖层 module.exports {devServer: {client: {overlay: {warnings: false,error…

安卓面试题多线程41-45

41. Java中都有哪些同步器?1.synchronized关键字   在Java中,使用synchronized关键字可以对代码块或方法进行同步,使得在同一时刻只有一个线程可以执行该代码块或方法。   下面是一个使用synchronized关键字同步的示例代码: public class SynchronizedExample {private…

Android下的Touch事件分发详解

文章目录 一、事件传递路径二、触摸事件的三个关键方法2.1 dispatchTouchEvent(MotionEvent ev)2.2 onInterceptTouchEvent(MotionEvent ev)2.3 onTouchEvent(MotionEvent event) 三、ViewGroup中的dispatchTouchEvent实现四、总结 在Android系统中,触摸事件的分发和…

k8s入门到实战(一)—— kubernetes概述

k8s 概述 k8s github地址:https://github.com/kubernetes/kubernetes 官方文档:https://kubernetes.io/zh-cn/docs/home/ k8s,全程是 kubernetes,这个名字源于希腊语,意为"舵手"或"飞行员” k8s 这…

mysql忘记root密码

一、用安全模式启动mysql 在 my.ini(windows的安装目录)或 /etc/my.cnf(linux) 的最后一行添加 skip-grant-tables1 重启mysql服务 systemctl restart mysqld 二、创建admin用户 免密码使用root登录进去 $ mysql -uroot 创建…

启动性能优化

一、应用启动慢的原因 1.在主线程执行了太多耗时的操作,比如加载数据,或者初始化三方库等等,导致在Application的oncreate或者Activity的oncreate方法中耗时太久 2.布局嵌套太深,或者一些不会立即使用的布局也在一开始一起加载到…

Linux-Miniconda安装

下载miniconda安装文件 get "https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh" -O ~/miniconda.sh 如果是其它系统或者架构,访问地址获取对应安装脚本: https://mirrors.tuna.tsinghua.edu.cn…

Offlian RL: Weighted Policy Constraints for Offline Reinforcement Learning

AAAI 2023 paper Intro 分布偏移导致离线RL对于OOD数据存在过估计问题。因此一些方法限制策略靠近行为策略。但是着很大程度受限于数据集的质量。若是数据集存在非专家,一个自然的问题是是否有可能构建一个更合理的策略约束方法,该方法通过识别数据集中…

面试算法-111-课程表 II

题目 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。 例如,想要学习课程 0 ,你需要先完成…

SpringBoot 3整合Elasticsearch 8

这里写自定义目录标题 版本说明spring boot POM依赖application.yml配置新建模型映射Repository简单测试完整项目文件目录结构windows下elasticsearch安装配置 版本说明 官网说明 本文使用最新的版本 springboot: 3.2.3 spring-data elasticsearch: 5.2.3 elasticsearch: 8.1…

2024年软件测试岗现状?“我“进阶了测试开发,一路狂飙...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、测试工程师的现…

SM2098EHD:巴西双电压球泡灯应用

巴西使用的双电压系统主要包括127V和240V。这种双电压系统是为了适应不同的电器设备和需求。在巴西,有些电器设备可能需要127V的电压,而有些则可能需要240V的电压。 因此,如果你在巴西使用电器设备,需要确保设备能够适应巴西的双…

【数据结构】绪论

文章目录 开篇:数据结构的学习之路1、开篇_数据结构在学什么2、数据结构的基本概念数据数据元素、数据项数据结构、数据对象数据类型、抽象数据类型数据结构的三要素逻辑结构数据的物理结构(存储结构)数据的运算 最后总结内容 3、算法的基本概…

Linux 理解文件系统、磁盘结构、软硬链接

目录 一、理解磁盘结构 1、磁盘的物理结构 2、硬件层面理解 3、磁盘的具体物理存储结构 4、进行逻辑抽象 5、磁盘文件的管理 6、创建新文件的过程 二、理解文件系统 1、文件的构成 2、为何选择4KB而非512字节作为基本单位? 3、文件系统的组成 数据块(Data Blocks&a…

图像抠图DIS——自然图像中高精度二分图像抠图的方法(C++/python模型推理)

概述 DIS(Dichotomous Image Segmentation)是一种新的图像分割任务,旨在从自然图像中分割出高精度的物体。与传统的图像分割任务相比,DIS更侧重于具有单个或几个目标的图像,因此可以提供更丰富准确的细节。 为了研究…

Oracle完全开发手册基础版(一篇学会所有Oracle所有知识点)

一、Oracle基础 1.简介 Oracle Database,又名Oracle RDBMS,或简称Oracle,是甲骨文公司的一款关系数据库管理系统。本课程主要介绍Oracle的SQL基础,包括表空间的概念,如何登录Oracle数据库,如何管理表及表中的数据,以及约束的应用。为后续课程的学习打下一个良好的基础…

Ubuntu20.04上,VTK9.3在QT5上的环境配置与开发测试

Ubuntu20.04上,VTK9.3在QT5上的环境配置与开发测试 1 背景介绍2 VTK9.3的编译安装2.1 安装ccmake 和 VTK 的依赖项:2.2 建立VTK编译文件夹并下载2.3 cmake配置VTK9.3的编译环境2.4 make编译安装VTK9.32.5 测试VTK安装是否成功 3 基于qmake的QT5的VTK9.3开…

Nginx中设置反向代理

在Nginx中设置反向代理,你需要使用proxy_pass指令。以下是一个简单的配置示例,它将Nginx配置为反向代理,将进入的流量转发到在本地运行的Web服务器上。 nginx http { server { listen 80; location / {proxy_pass http://localhost:8080;pro…

异地共享文件如何设置?

在当今数字化时代,异地办公已成为常态,越来越多的企业和个人需要在不同地区间进行文件共享与访问。为了解决复杂网络环境下的远程连接问题,北京金万维科技有限公司推出了一款名为【天联】的异地组网内网穿透产品。 【天联】组网是一款由北京金…