调用方法:
try {
const deviceId = await withTimeout(this.ScanDevice(), 3000)
console.log('deviceId', deviceId)
} catch (e) {
//console.log('ScanDevice', err)
//return [false, 100]
}
超时方法:
/**
* 超时控制函数
* @param {Promise} promise 回调函数
* @param {number} timeout 超时时间, 默认10s
*/
export function withTimeout(promise, timeout = 10000) {
let timeoutEvent = null
const logicPromise = new Promise((resolve, reject) => {
promise.then((data) => {
if (timeoutEvent) {
// 清理超时
clearTimeout(timeoutEvent)
timeoutEvent = null
}
resolve(data)
})
})
// 创建一个新的 Promise 对象,用于处理超时情况
const timeoutPromise = new Promise((resolve, reject) => {
timeoutEvent = setTimeout(() => {
reject(`执行超时`);
}, timeout);
});
// 将两个 Promise 对象(原始的 promise 和超时的 promise)合并为一个新的 Promise 对象
return Promise.race([logicPromise, timeoutPromise]);
}