在 node.js 中同步获取 mysql 查询的输出

阿马尔

我有以下代码:

app.get('/showtable1', (req, res) => {
  console.log("yo ho");
  mysqlconnection.query('SELECT d_name FROM datacenters', (err, rows, fields) => {
    if (!err) {
      var array = [];
      var tier = ['Class 0','Class 1','Class 2','Class 3'];
      var str = '';
      Object.keys(rows).forEach(function(key) {
        var row = rows[key];
        array.push(row.d_name);
      });
      for( var i = 0 ; i<array.length ; i++) {
        str += '<tr><td>'+array[i]+'</td>';
        console.log('sfsf');
        for (var j=0 ; j< tier.length ; j++) {
          let query1  = "SELECT * FROM `datacenters` WHERE  d_name = '"+array[i]+"' AND d_tiers LIKE '%"+tier[j]+"%'"
          mysqlconnection.query(query1,(err,rows) => {
            if(!err) {
              if(rows.length !=0) {
                console.log(1);
              } else {
                console.log(0);
              }
            }
          });
        }
      }
      res.send(rows);
    } 
    else
      console.log(err);
  })
});

这段代码的输出是:

yo ho
sfsf
sfsf
sfsf
1
1
0
0
1
1
1
0
1
1
1
0

但我需要输出为:

yo ho
sfsf
1
1
0
0
sfsf
1
1
1
0
sfsf
1
1
1
0

第一个输出来了,因为代码是异步运行的;但我需要同步运行它。我怎样才能做到这一点?

1565986223

异步任务没有顺序。您可以使用Promiseasync/await来获得有序的输出。

您可以承诺您的查询,例如:

function getNames() {
  return new Promise((resolve, reject) => {
    mysqlconnection.query('SELECT d_name FROM datacenters', (err, rows, fields) => {
      if (!err) {
        reject(err);
      } else {
        resolve(rows)
      }
    })
  });
}

function getDatacenters(firstVal, tier) {
  const query1  = "SELECT * FROM `datacenters` WHERE  d_name = '"+firstVal+"' AND d_tiers LIKE '%"+tier+"%'";
  return new Promise((resolve, reject) => {
    mysqlconnection.query(query1,(err,rows) => {
      if(!err) {
        reject(err)
      } else {
        resolve(rows)
      }
    });
  })
}

然后在你的路线

app.get('/showtable1', async (req, res) => {
  console.log("yo ho");
  const namesArray = [];
  const names = await getNames();
  Object.keys(names).forEach(function(key) {
    var row = names[key];
    namesArray.push(row.d_name);
  });

  const namesVal = [];

  for (let i = 0; i < namesArray.length; i++) {
    for (let j = 0; j < tier.length; j++) {
      namesVal.push(getDatacenters(entry, tier));
    }
  }

  // ordered array or result
  const result = await Promise.all(namesVal)
  ...
  // rest of the code
})

注意:我不知道您使用的是哪个库。一些库提供Promise支持,因此您不必编写自己的包装器

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js中的MySQL问题-获取所有查询

来自分类Dev

使用MySQL在Node JS中嵌套查询

来自分类Dev

Node.js中的“ where in” MySQL查询

来自分类Dev

同步node.js中的查询(或事件)

来自分类Dev

在节点js代码中的mysql查询的输出文件中获取日期

来自分类Dev

Node.js在MySQL查询中更改全局变量

来自分类Dev

如何从Node.js中的循环添加MySQL查询结果?

来自分类Dev

Node.js中的多个mysql查询和回调

来自分类Dev

在此node.js函数中运行多个MySQL查询

来自分类Dev

如何从Node.js中的mySQL查询返回JSON对象

来自分类Dev

node.js - 从 mysql 查询中调用 javascript 变量

来自分类Dev

mongodb(+ mongoose)+ node.js中的同步查询

来自分类Dev

如何从node.js中的HTTP请求获取同步结果

来自分类Dev

在mysql查询中输出重复

来自分类Dev

为什么在Node JS中执行Mysql查询比直接执行Mysql查询要慢得多?

来自分类Dev

mysql / node.js如何使/伪同步?

来自分类Dev

使用node-mysql创建同步查询

来自分类Dev

使用MySQL查询的Node.js

来自分类Dev

Node.js MySQL查询执行流程

来自分类Dev

Openshift Node.js MySQL查询崩溃

来自分类Dev

Node.js MySQL 查询错误

来自分类Dev

在node.js mysql-node查询中使用变量

来自分类Dev

如何在node.js中从mysql获取数据

来自分类Dev

如何使用Node.js在Apache Storm中获取输出

来自分类Dev

node.js,表达-以同步方式在循环内一次又一次执行mysql查询

来自分类Dev

命令输出作为MySQL查询中的输入

来自分类Dev

如何在MySQL中查询此输出?

来自分类Dev

PHP中的mysql查询无输出

来自分类Dev

在php变量中输出mysql查询结果