异步编程容易犯的错误

前言

此处以uniapp开发为例

		scan() {
			let that = this;
			uni.scanCode({
				success: function (res) {
					console.log('条码类型:' + res.scanType);
					console.log('条码内容:' + res.result);
					qrDecrypt(res.result).then((res) => {
						let flag
						that.scanBeforeAuths(res.msg).then((dd) => {
							flag = dd;
							console.log(dd, 'dd');
						});
						console.log(flag, 'flag');
						if (flag) {
							that.$tab.navigateTo('/pages/person/check/list?data=' + res.msg);
						} else {
							that.$modal.msgError('没有权限');
						}
					});
				}
			});
		},

此处犯了一个低级错误,flag变量的赋值是在异步操作完成之后发生的,所以当查flag的值时,它可能还没有被赋值为dd

修改

uni.scanCode({
    success: function (res) {
        console.log('条码类型:' + res.scanType);
        console.log('条码内容:' + res.result);
        qrDecrypt(res.result).then((decryptedRes) => {
            that.scanBeforeAuths(decryptedRes.msg).then((flag) => {
                console.log(flag, 'dd');
                if (flag) {
                    that.$tab.navigateTo('/pages/person/check/list?data=' + decryptedRes.msg);
                } else {
                    that.$modal.msgError('没有权限');
                }
            });
        });
    }
});

注意

请注意,如果qrDecrypt和scanBeforeAuths函数都可能抛出错误,您应该添加.catch来处理这些潜在的错误。例如:

qrDecrypt(res.result).then((decryptedRes) => {
    // ...
}).catch((error) => {
    console.error('qrDecrypt error:', error);
    // 处理错误
});

// 或者,如果您想要统一处理两个异步操作中的错误:
qrDecrypt(res.result).then((decryptedRes) => {
    return that.scanBeforeAuths(decryptedRes.msg);
}).then((flag) => {
    // ...
}).catch((error) => {
    console.error('Error:', error);
    // 处理错误
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值