前言
此处以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);
// 处理错误
});