【问题标题】:mysql node.js query error(undefined)? how to fix itmysql node.js 查询错误(未定义)?如何解决
【发布时间】:2019-11-26 16:44:37
【问题描述】:

问题是当第二个请求执行时,它返回undefined,即由于某种原因,它没有看到第二个请求的结果。它应该是这样工作的:我们发出第一个请求,如果少于两行,则执行第二个请求。可能是什么错误?如何解决它

let arr = [name1, name2 /* ... */];
let ipObject = { Objects: [] };
arr.forEach(function(elem, index) {
  connection.query("select 1 from i.goa where object_name = ?", elem, (err, rows) => {
    // console.log (rows.length);
    if (rows.length < 2) {
      //  console.log (elem);
      connection.query(
        "SELECT ip_adress FROM i.gs where server_kod=(SELECT server_kod FROM i.gol where object_kod =(SELECT object_kod FROM i.goa where  object_name=?))",

        elem,
        (err, rows2) => {
          console.log(elem);
          console.log(rows2);
          if (undefined !== rows2 && rows2.length > 0) {
            // if(rows2.length>0 ){
            ipObject.Objects.push({ objectName: elem, serverIp: rows2[0].ip_adress });
          }
          i++;
          if (i > count) {
            cb(JSON.stringify(ipObject));
            console.log(JSON.stringify(ipObject));
            //  fs.writeFileSync('e.json',JSON.stringify(ipObject),'utf8');
          }
        },
      );
    } else if (rows.length >= 2) {
      ipObject.Objects.push({ objectName: elem, serverIp: "ошибка" });
      cb(JSON.stringify(ipObject));
    }
  });
});

【问题讨论】:

  • 将完整的错误消息添加到您的问题中。

标签: javascript mysql node.js


【解决方案1】:

您可能在这里遇到了异步问题。

重构事物以使用 async/await 和 Promise.map(),也许这更接近你想要的:

function queryP(connection, query, params) {
  return new Promise((resolve, reject) => {
    connection.query(query, params, (err, result) => {
      if (err) {
        return reject(err);
      }
      resolve(result);
    });
  });
}

async function queryForName(connection, objectName) {
  const rows = await queryP(connection, "select 1 from i.goa where object_name = ?", objectName);
  if (rows.length >= 2) {
    return { objectName, serverIp: "ошибка" };
  }
  const rows2 = await queryP(connection, "SELECT ip_adress FROM i.gs where server_kod=(SELECT server_kod FROM i.gol where object_kod =(SELECT object_kod FROM i.goa where object_name=?))", objectName);
  if (rows2.length > 0) {
    return { objectName, serverIp: rows2[0].ip_adress };
  }
  return { objectName, serverIp: "???" };
}

async function queryForNames(connection, names) {
  return {
    Objects: await Promise.all(names.map((name) => queryForName(connection, name))),
  };
}

// could as well be `const resultObject = await queryForNames(...)` if you're calling this from an async function.
queryForNames(connection, [name1, name2]).then((resultObject) => {
  console.log(resultObject);
});

【讨论】:

    猜你喜欢
    • 2021-03-19
    • 2016-04-29
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多