You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现客户端生成4位ID并校验数据库存在性直至无冲突

实现方案

你需要的异步校验ID生成功能可以直接调整do...while的写法实现,JavaScript/TypeScript 原生不支持在do关键字前加await,但异步校验逻辑可以直接写在while的判断条件中,调整后的可运行代码如下:

const databaseIds = [1, 2, 3, 4, 5, 6, 7, 8]

async function generateId(): Promise<number> {
    let myId: number;
    // 先执行ID生成,再异步校验是否已存在
    do {
        myId = Math.floor(Math.random() * 11);
    } while (await checkIfIdExist(myId));

    return myId
}

async function checkIfIdExist(id: number): Promise<boolean> {
    // 模拟数据库查询延迟
    await new Promise(resolve => setTimeout(resolve, 2000));
    return databaseIds.includes(id)
}

优化建议

针对4位ID碰撞概率高的场景,可以做两点优化:

  • 生成ID前先拉取全量已存在的4位ID缓存到本地,后续校验直接走本地内存判断,避免每次循环都发起异步请求降低生成效率
  • 增加最大重试次数限制,避免4位ID全量被占用时函数进入死循环
// 增加重试限制的优化版示例
async function generateId(maxRetry = 100): Promise<number> {
    let myId: number;
    let retryCount = 0;
    // 提前拉取全量已存在ID缓存
    const existIds = await getAllExistIds();
    do {
        if(retryCount >= maxRetry) {
            throw new Error('ID生成重试次数超限,请稍后重试')
        }
        myId = Math.floor(Math.random() * 10000); // 4位ID范围是0~9999
        retryCount++
    } while (existIds.includes(myId));
    return myId
}

内容的提问来源于stack exchange,提问作者Ibrahim Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:24:03