1***@qq.com
1***@qq.com
  • 发布:2024-08-23 16:43
  • 更新:2024-08-23 16:43
  • 阅读:59

【报Bug】ios在async修饰的方法下使用await调用uni.writeBLECharacteristicValue()方法导致无任何回调,单次写入无论数据大小都没有回调

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 22H2

手机系统: iOS

手机系统版本号: iOS 17

手机厂商: 苹果

手机机型: iphone 11 pro max

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: CLI

CLI版本号: 3.0.0-alpha-3041820220630001

示例代码:

// 写入特征值
async writeCharacteristicValue(deviceId:string,serviceId:string,characteristicId:string,value:any,retryCount?:Number,callStatus?:boolean):Promise<Number>{
if(callStatus){
if(deviceMap[deviceId].subCharacteristic[characteristicId]){
await this.subscribe(deviceId,serviceId,characteristicId);
}
}
const write = new Promise((resolve,reject)=>{

            console.log(deviceId,serviceId,characteristicId,value)  

                uni.writeBLECharacteristicValue({  
                    deviceId: deviceId,  
                    serviceId: serviceId,  
                    characteristicId: characteristicId,  
                    // writeType:'writeNoResponse',  
                    value: value,  
                    success: (res) => {  
                        resolve(res);  
                    },  
                    fail: async (error) => {  
                        console.log("失败")  
                        await new Promise(reject=>setTimeout(reject,300));  
                        if(retryCount){  

                            console.log("当前失败retryCount:"+retryCount+"次");  
                            const a  = await this.writeCharacteristicValue(deviceId,serviceId,characteristicId,value,Number(retryCount)-1);  
                            console.log(a)  
                            if(a == 1){  
                                resolve(1);  
                            }else{  
                                resolve(0);  
                            }  
                        }else{  
                            // uni.hideLoading();  
                            // uni.showToast({  
                            //  title: "发送失败",  
                            //  icon: "error",  
                            //  duration: 1000  
                            // })  
                            // resolve(error);  
                            reject(error);  
                        }  
                        // reject(error);  

                    },  
                    complete: (res) => {  
                        console.log("通用")  

                    }  
                })  

        })  

        let status = 0;  

        await write.then(res => {  

            status = 1;  
        }).catch(res => {  

            status = 0;  

        });  

        return status;  

}  

操作步骤:

// 在另一个页面导入这个方法 然后
async function send(){
console.log(11)
await bc.writeCharacteristicValue(deviceId,types.serviceEnulm.service_id,types.serviceEnulm.service_file,metData)
consol.log(12)
}

预期结果:

控制台先输出一个11,之后等待数据写入完成,控制台输出12

实际结果:

控制台先输出一个11,之后没有任何输出

bug描述:

ios在async修饰的方法下使用await调用uni.writeBLECharacteristicValue()方法导致无任何回调,单次写入无论数据大小都没有回调

2024-08-23 16:43 负责人:无 分享
已邀请:

要回复问题请先登录注册