From 10680b0eebb883c982e8e5ab728fabd00c9d9ba7 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期四, 20 八月 2026 17:41:37 +0800
Subject: [PATCH] 更新

---
 src/aliyunClient.js |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/src/aliyunClient.js b/src/aliyunClient.js
index af6f19c..cb6910e 100644
--- a/src/aliyunClient.js
+++ b/src/aliyunClient.js
@@ -15,14 +15,19 @@
 
   // 设备号 -> { iotDevice, productKey, deviceName }
   const deviceMap = new Map();
+  const creatingMap = new Map();
 
   async function ensureIotDevice(deviceNumber) {
     let entry = deviceMap.get(deviceNumber);
     if (entry && entry.iotDevice) {
       return entry;
     }
+    const creating = creatingMap.get(deviceNumber);
+    if (creating) {
+      return creating;
+    }
 
-    try {
+    const creatingPromise = (async () => {
       logger.info("Request Aliyun device secret", { deviceNumber });
       // 复用旧项目的 api.js 约定:第一个参数是相对路径
       const resp = await getAliyunDeviceSecret(
@@ -80,12 +85,20 @@
       entry = { iotDevice, productKey, deviceName };
       deviceMap.set(deviceNumber, entry);
       return entry;
+    })();
+
+    creatingMap.set(deviceNumber, creatingPromise);
+
+    try {
+      return await creatingPromise;
     } catch (err) {
       logger.error("ensureIotDevice error", {
         deviceNumber,
         error: err.message || err
       });
       return null;
+    } finally {
+      creatingMap.delete(deviceNumber);
     }
   }
 
@@ -147,6 +160,7 @@
       }
       deviceMap.delete(deviceNumber);
     }
+    creatingMap.clear();
   }
 
   return {

--
Gitblit v1.8.0