[AI Generated]: feat(*): 新增配网状态检测与SDK超时保护,优化配置流程稳定性
This commit is contained in:
@@ -303,31 +303,53 @@ App({
|
||||
* @param {*} value 要设置的新值
|
||||
*/
|
||||
setGlobalData(keyPath, value) {
|
||||
const keys = keyPath.split('.');
|
||||
let current = this.globalData;
|
||||
let oldValue = undefined;
|
||||
const keys = keyPath.split('.');
|
||||
let current = this.globalData;
|
||||
let oldValue = undefined;
|
||||
|
||||
// 遍历到目标属性的父级
|
||||
for (let i = 0; i < keys.length - 1; i++) {
|
||||
if (!current[keys[i]]) {
|
||||
current[keys[i]] = {}; // 如果路径不存在,创建空对象
|
||||
}
|
||||
current = current[keys[i]];
|
||||
}
|
||||
// 遍历到目标属性的父级
|
||||
for (let i = 0; i < keys.length - 1; i++) {
|
||||
if (!current[keys[i]]) {
|
||||
current[keys[i]] = {}; // 如果路径不存在,创建空对象
|
||||
}
|
||||
current = current[keys[i]];
|
||||
}
|
||||
|
||||
// 获取旧值
|
||||
oldValue = current[keys[keys.length - 1]];
|
||||
// 获取旧值
|
||||
oldValue = current[keys[keys.length - 1]];
|
||||
|
||||
// 只有当值发生变化时才更新并通知
|
||||
if (oldValue !== value) {
|
||||
current[keys[keys.length - 1]] = value; // 设置新值
|
||||
// 只有当值发生变化时才更新并通知
|
||||
if (oldValue !== value) {
|
||||
current[keys[keys.length - 1]] = value; // 设置新值
|
||||
|
||||
// 触发监听器
|
||||
if (this.globalData._callbacks[keyPath]) {
|
||||
this.globalData._callbacks[keyPath].forEach(callback => {
|
||||
callback(value, oldValue);
|
||||
});
|
||||
}
|
||||
}
|
||||
// 触发监听器
|
||||
if (this.globalData._callbacks[keyPath]) {
|
||||
this.globalData._callbacks[keyPath].forEach(callback => {
|
||||
callback(value, oldValue);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 给回调式 SDK 调用包裹超时保护,防止设备无响应时 UI 永久卡死
|
||||
* @param {Function} caller 接收 done 回调的执行函数,形如 (done) => sdk.method(params, done)
|
||||
* @param {number} timeout 超时毫秒数
|
||||
* @param {Function} onResult 正常回调,参数与 SDK 原始回调一致
|
||||
* @param {Function} onTimeout 超时后执行,负责 hideLoading + 提示
|
||||
*/
|
||||
callWithTimeout(caller, timeout, onResult, onTimeout) {
|
||||
let settled = false;
|
||||
const timer = setTimeout(() => {
|
||||
if (settled) return;
|
||||
settled = true;
|
||||
onTimeout();
|
||||
}, timeout);
|
||||
caller((res) => {
|
||||
if (settled) return;
|
||||
settled = true;
|
||||
clearTimeout(timer);
|
||||
onResult(res);
|
||||
});
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user