chenyc
5 天以前 10680b0eebb883c982e8e5ab728fabd00c9d9ba7
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 {