36 lines
863 B
JavaScript
36 lines
863 B
JavaScript
/**
|
||
* 首页蓝牙连接等流程用到的轻量异步工具(与组件内同名方法行为一致)
|
||
*/
|
||
export function sleep(ms = 300) {
|
||
return new Promise((resolve) => setTimeout(resolve, ms))
|
||
}
|
||
|
||
/**
|
||
* @param {() => boolean} checker
|
||
* @param {number} timeout 总超时 ms
|
||
* @param {number} interval 轮询间隔 ms
|
||
* @returns {Promise<boolean>} 条件在超时前成立为 true,否则 false
|
||
*/
|
||
export function waitForCondition(checker, timeout = 12000, interval = 250) {
|
||
return new Promise((resolve) => {
|
||
const start = Date.now()
|
||
const timer = setInterval(() => {
|
||
try {
|
||
if (checker()) {
|
||
clearInterval(timer)
|
||
resolve(true)
|
||
return
|
||
}
|
||
} catch (e) {
|
||
clearInterval(timer)
|
||
resolve(false)
|
||
return
|
||
}
|
||
if (Date.now() - start >= timeout) {
|
||
clearInterval(timer)
|
||
resolve(false)
|
||
}
|
||
}, interval)
|
||
})
|
||
}
|