| | |
| | | let pollCount = 0; |
| | | const maxPolls = 3; |
| | | const pollInterval = 2000; // 2秒 |
| | | |
| | | // 如果当前 trunkStatus 为 true (开),则期望执行“关闭”操作,目标状态为 '0' |
| | | // 如果当前 trunkStatus 为 false (关),则期望执行“开启”操作,目标状态为 '1' |
| | | const expectedTrunkState = trunkStatus ? '0' : '1'; |
| | | |
| | | const handlePollFail = () => { |
| | | const handlePollFail = (reason: string, actualValue?: any) => { |
| | | pollCount++; |
| | | if (pollCount < maxPolls) { |
| | | trunkPollTimerRef.current = setTimeout(doPoll, pollInterval); |
| | |
| | | queryVehicleTrunkOpenStatus({ orderId: targetOrderId }).then((pollRes: any) => { |
| | | const data = pollRes; |
| | | const rawValue = data?.stateMap?.trunkAjarCloseSt?.value; |
| | | |
| | | |
| | | // 如果 data 或 value 为空,继续轮询 |
| | | if (!data || rawValue === undefined || rawValue === null || rawValue === '') { |
| | | handlePollFail(); |
| | | handlePollFail('empty_data_or_value', rawValue); |
| | | return; |
| | | } |
| | | |
| | | const value = String(rawValue); |
| | | |
| | | if (value === '0' || value === '1') { |
| | | // 0: 关闭, 1: 开启 |
| | | |
| | | // 轮询成功条件改为“状态 == 目标状态” |
| | | if (value === expectedTrunkState) { |
| | | const isOpen = value === '1'; |
| | | setTrunkStatus(isOpen); |
| | | Taro.hideLoading(); |
| | |
| | | }); |
| | | onSuccess?.(); |
| | | } else { |
| | | // 继续轮询 |
| | | handlePollFail(); |
| | | // 状态不匹配,继续轮询 |
| | | handlePollFail('state_mismatch', value); |
| | | } |
| | | }).catch(() => { |
| | | handlePollFail(); |
| | | }).catch((err) => { |
| | | handlePollFail('api_error', err); |
| | | }); |
| | | }; |
| | | |