Uni-APP项目中的Promise挂载失效问题

文章讲述了作者在学习Uni-app时遇到Promise处理不生效的问题,详细描述了在API请求中因数据类型比较错误导致的问题,即使用!=而非==进行严格比较时遇到的困扰。作者通过老司机的帮助发现并解决了问题,提醒基础薄弱的学习者要理解数据类型转换规则,并建议通读Vue文档以加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 概述

说一下我这边遇到的背景,主要记录一下遇到的坑和感受;在初学Uni-app过程中很自然的会遇到Promise挂载的问题,我们也会找很多视频跟着学跟着写,发现老师们的挂在是有效的,而我们的挂载就是不起作用,不论你写多多少console.log还是判断不出来问题在哪里,甚至有些现象是反你现有认知的;这里勇敢的记录,不怕献丑;好,话不多找直接少代码说过程;

  1. 问题及处理过程

Util文件目录下新建的api.js,用于收纳请求(这里测试用的公网接口),代码如下:

然后在main.js中申明一下请求:

在async方法中调用,页面中申明调用:

逻辑、思路、代码都很简单,但是在success方法走不到,resovle方法不起作用;对着老师视频敲打了好几遍,没有发现问题,由于是业余学习,当天凌晨前也就回去了;

第二天一早九点,老司机一到就带着代码过去了,通过console大法,结合请求返回值的分析,没有超过三步到位了;原来是因为res.data.status!==1的判断有问题,!== 用来较为严格的比较,除判断数据是否不相等 ,还会判断两者数据类型是否相同,如不相同也不会转换数据类型,返回(false);

返回值中的1是一个字符串,这里代码里判断应该用res.data.status!==’1’;

  1. 小结

== 用来比较或者判断两者是否相等,比较时可以自动转换数据类型。

=== 用来较为严格的比较,除判断数据是否相等 ,还会判断两者数据类型是否相同,如不相同也不会转换数据类型,返回(false)。

顺便说一下,!= 用来比较或者判断两者是否不相等,比较时可以自动转换数据类型。

!== 用来较为严格的比较,除判断数据是否不相等 ,还会判断两者数据类型是否相同,如不相同也不会转换数据类型,返回(false);

其实不是什么大问题,但对于没有基础或则基础薄的同学们,这块可能会卡住;由此人为,要想处理这块工作,还是要把Vue通读一下作为支撑;娱乐分享,愿博一笑,祝同学们发大财!

### UniApp中实现拍照识别功能的方法 在UniApp中实现拍照识别功能可以通过多种方式完成,具体取决于需求场景和技术栈的选择。以下是几种常见的实现方案: #### 1. 使用百度OCR API 实现车牌号识别 通过调用百度OCR的开放接口,可以轻松实现车牌号的扫描与识别功能。此方法适用于需要高精度识别的应用场景。 - **调用相机拍摄图片** 可以使用`uni.chooseImage()`或`uni.camera()`来获取用户拍摄的照片或者从相册选择的图片文件路径[^1]。 - **上传图片至服务器处理** 将获取到的图片路径通过`uni.uploadFile()`上传至云端服务(如百度OCR),由其负责图像分析和文字提取工作[^1]。 ```javascript // 调用相机拍摄照片 const takePhotoAndRecognize = () => { uni.chooseImage({ count: 1, sourceType: ['camera'], success(res) { const tempFilePath = res.tempFilePaths[0]; recognizePlateNumber(tempFilePath); } }); }; // 图片上传并请求 OCR 接口 const recognizePlateNumber = (filePath) => { uni.uploadFile({ url: 'https://your-baidu-ocr-api-endpoint', filePath: filePath, name: 'image', formData: { type: 'plate' }, success(response) { const data = JSON.parse(response.data); console.log('识别结果:', data.words_result[0].words); // 输出车牌号码 } }); }; ``` --- #### 2. 基于本地插件的人脸识别功能 如果目标是实现人脸识别而非简单的文字识别,则可以选择集成第三方SDK或者依赖原生能力。例如,在某些情况下可以直接借助微信小程序提供的`wx.initFaceDetect()`函数来进行初步检测[^3]。 然而对于跨平台应用来说更推荐采用统一封装好的解决方案比如以下例子展示如何构建一个人脸验证流程而无需额外安装外部库[^2]: ```typescript import { ref } from "vue"; let loadingStatus = ref<boolean>(false); function handleIdentityVerification() { if (!loadingStatus.value) { selectPictureForAnalysis(); } } async function selectPictureForAnalysis(): Promise<void> { try { loadingStatus.value = true; await new Promise((resolve, reject) => uni.chooseImage({ count: 1, sizeType: ["original", "compressed"], sourceType: ["album", "camera"], success(selectedImages): void { processSelectedImage(selectedImages.tempFilePaths[0]); resolve(undefined); }, fail(errorDetails): void { throw errorDetails.errMsg || "Selection failed."; } }) ); } catch (errorEvent) { alert(`Error during image selection: ${String(errorEvent)}.`); } finally { loadingStatus.value = false; } } function processSelectedImage(imagePath:string){ /* Implement your logic here to send the imagePath variable either directly into an AI model or via HTTP request */ } ``` 以上代码片段展示了当触发身份认证操作时会先判断当前是否有正在进行的任务以防重复提交;接着允许用户选取一张待分析的脸部影像资料最后再进一步传递给后台做深入运算解析[^2]. --- #### 3. 自定义插件开发 为了满足特定业务需求还可以考虑自行研发专用组件。这通常涉及以下几个方面的工作: - 定义清晰的功能边界; - 编写高效的算法模型用于特征抽取匹配等核心环节; - 测试优化确保性能稳定可靠。 过鉴于大多数开发者可能缺乏足够的资源投入此类项目因此建议优先评估现有成熟产品能否解决问题后再决定是否启动自研计划。 --- ### 注意事项 无论选用哪种途径都需要关注隐私保护政策遵守法律法规合理合法地收集存储个人信息同时也要考虑到同操作系统之间可能存在差异所以务必做好充分测试确认最终成品能够在各个主流平台上正常运作无误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReaderTheEnd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值