油猴异步等待问题
尝试在油猴脚本中编写异步脚本
(async function () {
let isLocked = 0;
async function checkLock() {
setTimeout(() => {
isLocked = GM_getValue("settings").locked;
console.log("isLocked值为:", isLocked);
}, 500);
}
while (true) {
await checkLock();
if (isLocked == 0) {
// 若当前存储没被锁,则使用存储,并上锁存储
GM_setValue("settings", { locked: 1 });
break;
}
}
// 对存储进行处理相关代码
// 解锁存储
GM_setValue("settings", { locked: 0 });
// 接下来的代码
})();
其中isLocked用于判断是否有其它页面同一脚本在对油猴内部的存储进行处理,若当前存储正在被其它页面脚本进行处理则休眠500ms,然后再次检查settings中的locked值;若没有脚本正在使用存储则上锁存储并对存储进行处理:
GM_setValue("settings", { locked: 1 }
想要的目标是若发现数据库被上锁(说明其他页面脚本正在使用存储)则500ms之后重新检查settings中的locked值,并且在这500ms内线程不应被阻塞(异步)
但是似乎在
await checkLock()
一行中并没有等待500ms,而是直接执行了接下来的if语句
并且若isLocked初始值不为0,则页面会卡死,进一步证明上面的猜想
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你这个场景需求也用不着这样啊,直接 setInterval 就好了,满足条件后 clearInterval 就行。干嘛要搞的这么复杂
伪代码