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