From 74feb99b1b4e2eb3706bbb503d07fb087ca39d4a Mon Sep 17 00:00:00 2001
From: wangyi <2946747746@qq.com>
Date: 星期四, 02 四月 2026 15:15:02 +0800
Subject: [PATCH] 出运单增加过滤发货通知单和物流状态
---
src/utils/healthCheck.js | 89 ++++++++++++++++++++++++++++++++------------
1 files changed, 64 insertions(+), 25 deletions(-)
diff --git a/src/utils/healthCheck.js b/src/utils/healthCheck.js
index 20ab75d..a873856 100644
--- a/src/utils/healthCheck.js
+++ b/src/utils/healthCheck.js
@@ -13,35 +13,75 @@
];
/**
- * 妫�娴嬪崟涓湇鍔″仴搴风姸鎬�
+ * 甯﹁秴鏃舵帶鍒剁殑 fetch 璇锋眰灏佽
+ * @param {string} url 璇锋眰鍦板潃
+ * @param {Object} options fetch 閰嶇疆
+ * @param {number} timeout 瓒呮椂鏃堕棿锛堟绉掞級锛岄粯璁� 3000ms
+ * @returns {Promise<Response>} 璇锋眰鍝嶅簲
+ */
+const fetchWithTimeout = async (url, options = {}, timeout = 3000) => {
+ // 1. 鍒涘缓涓鎺у埗鍣紝鐢ㄤ簬瓒呮椂鍙栨秷璇锋眰
+ const controller = new AbortController();
+ const signal = controller.signal;
+
+ // 2. 瓒呮椂瀹氭椂鍣細鍒版椂闂村悗涓璇锋眰骞舵姏鍑洪敊璇�
+ const timeoutTimer = setTimeout(() => {
+ controller.abort();
+ throw new Error(`璇锋眰瓒呮椂锛�${timeout}ms锛塦);
+ }, timeout);
+
+ try {
+ // 3. 缁戝畾涓淇″彿鍒� fetch 璇锋眰
+ const response = await fetch(url, {
+ ...options,
+ signal, // 鍏抽敭锛氬叧鑱斾腑姝㈡帶鍒跺櫒
+ });
+ clearTimeout(timeoutTimer); // 璇锋眰鎴愬姛锛屾竻闄よ秴鏃跺畾鏃跺櫒
+ return response;
+ } catch (error) {
+ clearTimeout(timeoutTimer); // 鍑洪敊/瓒呮椂锛屾竻闄ゅ畾鏃跺櫒
+ // 鍖哄垎涓閿欒锛堣秴鏃讹級鍜屽叾浠栭敊璇�
+ if (error.name === 'AbortError') {
+ throw new Error(`璇锋眰瓒呮椂锛�${url} 瓒呰繃 ${timeout}ms 鏈搷搴擿);
+ }
+ throw error; // 鎶涘嚭鍏朵粬閿欒锛堝缃戠粶閿欒锛�
+ }
+};
+
+/**
+ * 妫�娴嬪崟涓湇鍔″仴搴风姸鎬侊紙鏂板瓒呮椂鎺у埗锛�
* @param {Object} service - 鏈嶅姟閰嶇疆锛坆aseUrl + healthPath锛�
* @returns {Promise<String|null>} 鍙敤鐨� baseUrl锛屽け璐ヨ繑鍥� null
*/
export const checkServiceHealth = async (service) => {
const { baseUrl, healthPath } = service;
if (!baseUrl) return null;
- return new Promise(async (resolve, reject) => {
- try {
- // 鍋ュ悍妫�鏌ヨ姹傦紙瓒呮椂 3 绉掞紝涓嶆惡甯� Token锛岄伩鍏嶆湭鐧诲綍鎷︽埅锛�
- const response = await fetch(`${baseUrl}${healthPath}`, {
+
+ try {
+ // 鍋ュ悍妫�鏌ヨ姹傦紙浣跨敤灏佽鐨勫甫瓒呮椂鐨� fetch锛�3绉掕秴鏃讹級
+ const response = await fetchWithTimeout(
+ `${baseUrl}${healthPath}`,
+ {
method: "GET",
- timeout: 3000,
headers: {
"Content-Type": "application/json",
},
- });
- if (response.ok) {
- console.log(`鏈嶅姟 ${service.name} 鍋ュ悍锛屽湴鍧�锛�${baseUrl}`);
- resolve(baseUrl)
- // return baseUrl;
- }
- } catch (error) {
- console.error(`鏈嶅姟 ${service.name} 杩炴帴澶辫触锛歚, error.message);
- resolve(null)
- // return null;
- }
- })
+ },
+ 3000 // 鏄庣‘閰嶇疆 3 绉掕秴鏃�
+ );
+ if (response.ok) {
+ console.log(`鏈嶅姟 ${service.name} 鍋ュ悍锛屽湴鍧�锛�${baseUrl}`);
+ return baseUrl;
+ } else {
+ // 鍝嶅簲鐘舵�佺爜闈� 2xx锛岃涓烘湇鍔′笉鍙敤
+ console.warn(`鏈嶅姟 ${service.name} 鍝嶅簲寮傚父锛岀姸鎬佺爜锛�${response.status}`);
+ return null;
+ }
+ } catch (error) {
+ console.error(`鏈嶅姟 ${service.name} 杩炴帴澶辫触锛歚, error.message);
+ return null;
+ }
};
/**
@@ -52,21 +92,20 @@
// 骞惰妫�娴嬫墍鏈夋湇鍔★紙鎻愰珮鏁堢巼锛�
try {
const healthCheckPromises = serviceList.map((item) => {
- return checkServiceHealth(item)
+ return checkServiceHealth(item);
});
- const healthResult = await Promise.all(healthCheckPromises); // 妫�娴嬪埌鍋ュ悍鐨勯摼鎺ュ氨绔嬪埢杩斿洖
+ const healthResult = await Promise.all(healthCheckPromises);
// 绛涢�夊彲鐢ㄧ殑 baseUrl
- console.log(healthResult)
- const availableBaseUrl = healthResult.filter((item)=>item!=null)[0]
+ console.log("鍋ュ悍妫�鏌ョ粨鏋滐細", healthResult);
+ const availableBaseUrl = healthResult.filter((item) => item != null)[0];
if (availableBaseUrl) {
return availableBaseUrl;
} else {
- // 鎵�鏈夋湇鍔″潎涓嶅彲鐢紝鎶涘嚭寮傚父锛堝悗缁湪鍒濆鍖栨椂鎹曡幏锛�
+ // 鎵�鏈夋湇鍔″潎涓嶅彲鐢紝鎶涘嚭寮傚父
throw new Error("鎵�鏈夋湇鍔″仴搴锋鏌ュけ璐ワ紝璇锋鏌ユ湇鍔$姸鎬佹垨缃戠粶閰嶇疆");
}
- }catch(err) {
+ } catch (err) {
throw err;
}
-
};
\ No newline at end of file
--
Gitblit v1.9.1