执行思路:
温馨提示:此处内容需要登录后才能查看!
以下是实际项目中的更新检测部分的代码:
checkUpdate(); //检测并更新(异步方式)
getUiConfig(confKey); //读取UI配置
/**
* 检测并更新(异步方式)
* @author 飞云
* @wechat imfeiyun
* @link http://www.feiyunjs.com
*/
function checkUpdate() {
$("#btn_begin").addClass('weui-btn_disabled').prop("disabled", true); //禁用
window.at.publicSet('is_updateing', false); // 写入公共变量
$.showLoading('更新中...');
performAsyncTask();
function asyncOperation() {
return new Promise((resolve, reject) => {
setTimeout(() => {
window.at.runJsFile('update.js');
console.log('异步操作完成');
resolve();
}, 1000);
});
}
async function performAsyncTask() {
await asyncOperation();
console.log('async/await 的代码继续执行');
}
// 由于是异步更新,需要等N秒后,再检测共享变量
setTimeout(() => {
// /// 限时检测是否更新完成
let limitInMillis = 60 * 1000; // 限制N秒
// 调用递归函数,每隔 N 毫秒检查一次共享变量,总执行时间限制为 N 毫秒(exampleCondition返回true可提前结束循环)
executeWithInterval(3 * 1000, limitInMillis, exampleCondition)
.then((stoppedDueToCondition) => {
if (stoppedDueToCondition) {
console.log('任务因条件满足而停止');
// 等待N秒后,再关闭Loading
setTimeout(() => {
$.hideLoading(); // 更新完成,关闭loading
$("#btn_begin").removeClass('weui-btn_disabled').prop("disabled", false); // 解除禁用
}, 5 * 1000);
} else {
console.log('任务因时间限制到达而停止');
$.hideLoading(); // 更新完成,关闭loading
$("#btn_begin").removeClass('weui-btn_disabled').prop("disabled", false); // 解除禁用
}
});
}, 5 * 1000);
}
// 示例条件函数,返回 true 表示任务应该停止(停止递归)
function exampleCondition() {
// 这里可以添加你的条件逻辑
let resp = window.at.publicGet('is_updateing'); // 读取公共变量
return !toBooleanTrue(resp); // 返回 true 表示递归应该停止
}
/**
* 在指定时间间隔内执行任务,直到达到总时间限制或某个条件满足为止,并返回是否因为条件满足而停止。
* @param {number} intervalInMillis - 每次任务执行之间的时间间隔,单位为毫秒。
* @param {number} durationInMillis - 总执行时间限制,单位为毫秒。
* @param {function} condition - 判断是否停止执行任务的条件函数,返回 true 表示停止。
* @returns {Promise<boolean>} - 一个 Promise 对象,解析为 true 表示因条件满足而停止,false 表示因时间限制到达而停止。
* @author 飞云
* @wechat imfeiyun
* @link http://www.feiyunjs.com
*/
function executeWithInterval(intervalInMillis, durationInMillis, condition) {
return new Promise((resolve) => {
const startTime = Date.now();
const endTime = startTime + durationInMillis;
function execute() {
// 检查当前时间是否小于结束时间并且条件是否满足
if (Date.now() < endTime && !condition()) {
// 执行任务
console.log('执行任务');
// 设置延迟调用 execute 函数,以便在指定间隔后再次执行任务
setTimeout(execute, intervalInMillis);
} else {
// 条件满足或总时间限制到达,停止执行
const stoppedDueToCondition = condition(); // 检查条件是否满足
console.log(stoppedDueToCondition ? '因条件满足而停止执行' : '时间限制到达,停止执行');
resolve(stoppedDueToCondition); // 解析 Promise,返回 true 或 false
}
}
// 启动任务执行
execute();
});
}
关联文章
AiWork热更新在webui中的具体实现
AiWork和autojs使用H5做脚本界面时,处理按钮的重复点击
AiWork和autojs可用的同步POST和异步POST请求,使用H5做脚本界面
autox.js结合JsBridge及weui+实现web界面的交互,应用WebView与 HTML开发脚本界面
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » AiWork开发WEBUI脚本界面中,使用异步方式检测更新的思路和具体实现
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » AiWork开发WEBUI脚本界面中,使用异步方式检测更新的思路和具体实现