export function getOrderStatusData(data, timeout = 120000) {
let timer = null;
let endTime = Date.now() + timeout;
return new Promise((resolve, reject) => {
async function getOrder(data) {
try {
let response = await Orderlnfo(data);
// 清除定时器
clearTimeout(timer);
// 在成功后1秒再次执行轮询
setTimeout(startPolling.bind(null, data), 1000);
resolve(response);
} catch (error) {
// 在失败后1秒再次执行轮询
setTimeout(startPolling.bind(null, data), 1000);
// 检查是否超过了结束时间
if (Date.now() > endTime) {
clearTimeout(timer); // 超过结束时间时,清除定时器
reject(new Error('Timeout'));
}
}
}
function startPolling(data) {
// 检查是否超过了结束时间
if (Date.now() > endTime) {
clearTimeout(timer); // 超过结束时间时,清除定时器
reject(new Error('Timeout'));
} else {
// 每隔1秒轮询一次
timer = setTimeout(getOrder.bind(null, data), 1000);
}
}
// 开始轮询
startPolling(data);
});
}
用于接口一直轮询
最新推荐文章于 2024-07-07 13:59:05 发布