簡體   English   中英

mysql node.js 查詢錯誤(未定義)? 如何修復它

[英]mysql node.js query error(undefined)? how to fix it

問題是當執行第二個請求時,它返回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));
    }
  });
});

您可能會在這里遇到異步問題。

重構事物以使用 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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM