uni-app中uni.createBLEConnection()API的timeout属性不生效

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app中uni.createBLEConnection()API的timeout属性不生效

产品分类

uniapp/小程序/微信

开发环境信息

项目 详情
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 Windows 10 家庭中文版 22H2
HBuilderX类型 正式
HBuilderX版本号 4.45
第三方开发者工具版本号 1.06.2412040
基础库版本号 3.7.3
项目创建方式 HBuilderX

示例代码

const connBlue = (e) => {  
    uni.showLoading({  
        title: '连接中'  
    });  
    uni.createBLEConnection({  
        deviceId: e.deviceId,  
        timeout: 1000,  
        success(res) {  
            uni.showToast({  
                title: '连接成功',  
                icon: 'success',  
                duration: 2000  
            });  
            ConnBlueList.push(e);  
        },  
        fail(err) {  
            uni.showToast({  
                title: '连接失败',  
                icon: 'error',  
                duration: 2000  
            });  
        }  
    })  
}

操作步骤

const connBlue = (e) => {  
    uni.showLoading({  
        title: '连接中'  
    });  
    uni.createBLEConnection({  
        deviceId: e.deviceId,  
        timeout: 1000,  
        success(res) {  
            uni.showToast({  
                title: '连接成功',  
                icon: 'success',  
                duration: 2000  
            });  
            ConnBlueList.push(e);  
        },  
        fail(err) {  
            uni.showToast({  
                title: '连接失败',  
                icon: 'error',  
                duration: 2000  
            });  
        }  
    })  
}

预期结果

达到设置的超时时间立刻弹出连接失败提示

实际结果

达到设置的超时时间后没有弹出连接失败提示,一直显示连接中,大概10s左右才提示连接失败

bug描述

uni.createBLEConnection() API的timeout属性不生效


2 回复

微信小程序的 api 是代理的没有做更改,写一个测试原生小程序测试功能是否正常,使用原生写法试试,如果原生也有问题,向微信小程序社区反馈。


在uni-app中使用uni.createBLEConnection() API时,如果遇到timeout属性不生效的问题,这通常是由于API的实现或平台兼容性问题导致的。虽然文档提供了timeout参数,但在某些平台或特定版本上可能不被支持或存在bug。下面是一些可能的解决方法和代码示例,帮助你更好地处理这个问题。

1. 检查API文档和平台兼容性

首先,确保你查阅的是最新的uni-app官方文档,并检查uni.createBLEConnection()timeout属性在你所使用的平台上是否被支持。

2. 使用Promise封装并设置自定义超时

由于timeout属性可能不生效,你可以考虑使用Promise封装API调用,并设置一个自定义的超时机制。以下是一个示例代码:

function createBLEConnectionWithTimeout(deviceId, timeout = 5000) {
    return new Promise((resolve, reject) => {
        const timer = setTimeout(() => {
            reject(new Error('BLE connection timed out'));
        }, timeout);

        uni.createBLEConnection({
            deviceId: deviceId,
            success: (res) => {
                clearTimeout(timer);
                resolve(res);
            },
            fail: (err) => {
                clearTimeout(timer);
                reject(err);
            }
        });
    });
}

// 使用示例
createBLEConnectionWithTimeout('your-device-id')
    .then(res => {
        console.log('BLE connection established:', res);
    })
    .catch(err => {
        console.error('BLE connection error:', err);
    });

3. 调试和日志记录

增加适当的日志记录,以便更好地理解问题所在。你可以在调用uni.createBLEConnection()前后添加日志,记录设备ID、调用时间等信息。

4. 联系uni-app支持

如果上述方法都无法解决问题,建议联系uni-app的官方支持或查看社区论坛,看看是否有其他开发者遇到并解决了相同的问题。

5. 考虑平台差异

不同平台(如iOS和Android)在BLE实现上可能存在差异。确保你的代码考虑到这些差异,并针对不同平台进行适当的调整。

通过上述方法,你可以在一定程度上绕过timeout属性不生效的问题,确保你的BLE连接请求有一个合理的超时处理机制。同时,持续关注uni-app的更新和文档变化,以便在问题得到官方修复时能够及时更新你的代码。

回到顶部