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

如何修复getDbInfo Promise函数仅返回单条查询结果的问题

问题根因
  • Promise 提前触发resolve:你的resolve逻辑写在了单次数据库查询的回调函数中,第一个ID的查询完成后就会立即执行resolve结束当前Promise,剩下的ID查询还未执行完成,自然只能拿到1条查询结果。
  • 结果插入逻辑错误:遍历查询返回结果res时,你重复把整个res数组push到结果集中,而非插入res[k]单条数据,会导致返回结果结构异常。
  • SQL注入风险:直接拼接用户传入的ID到SQL语句中,存在恶意注入攻击的安全隐患。
修复方案

推荐将每个ID的查询都包装为独立Promise,使用Promise.all等待所有查询完成后再统一返回结果,代码示例如下:

const getDbInfo = async (anArrayOfIDs) => {
  // 为每个ID生成独立的查询Promise
  const queryTasks = anArrayOfIDs.map(targetId => {
    return new Promise((resolve, reject) => {
      // 使用参数化查询避免SQL注入
      pool.query(
        "SELECT * FROM `tbl_ofInfo` WHERE tbl_ofInfo.sqlID = ?",
        [targetId],
        (err, queryRes) => {
          if (err) {
            console.log("error: ", err);
            return reject(err);
          }
          resolve(queryRes);
        }
      )
    })
  })
  // 等待所有查询完成后扁平化结果数组返回
  const allQueryResults = await Promise.all(queryTasks);
  return allQueryResults.flat();
}

你调用该函数时可以通过await或者.then()拿到最终的全量匹配结果,如果需要处理错误可以在外层加try/catch捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:24:03