【问题标题】:Get value from function in loop nodejs从循环nodejs中的函数获取值
【发布时间】:2017-08-21 18:25:24
【问题描述】:

我是 javascript 和 node js 的新手。我实际上想根据 MySQL 值比较两个数据。

我想做的是从db -> concat一对数据和value -> endloop中循环data -> get值对

这是我的代码

routes/masterdata.js

var Masterdata = require('../models/Masterdata');
var outputFile = {}
for (var i = 0; i < dataFile.length; i++) {
  if (dataFile[i]['existing'] != null) {
    for (var x = 0; x < dataFile.length; x++) {
      var param = {
        tech_row: dataFile[i]['existing'],
        tech_col: dataFile[x]['new']
      };

      Masterdata.compareData(param, function(err, rows) {
        console.log(rows);
        outputFile.push({
          value: rows
        });
      });
    }
  }
}

console.log(outputFile);

models/Masterdata.js

var Masterdata = {
  compareData: function(param, callback) {
    return db.query('SELECT value FROM sod_matrix WHERE TECH_NAME_ROW = ? AND TECH_NAME_COL = ?', [param.tech_row, param.tech_col], callback);

  }
}

我的问题是如何将函数比较数据中的数据填充到循环中的数组中?

【问题讨论】:

  • outputFile 是一个对象,而不是一个数组,这就是为什么您不能将您的信息推送到其中的原因。使用 var outputFile = [];而是。

标签: javascript mysql node.js asynchronous


【解决方案1】:
var Promise = require('bluebird');
var completed=[];
var Masterdata = require('../models/Masterdata');
var outputFile = []; //should be an array
for (var i = 0; i < dataFile.length; i++) {
  if (dataFile[i]['existing'] != null) {
    for (var x = 0; x < dataFile.length; x++) {
      var param = {
        tech_row: dataFile[i]['existing'],
        tech_col: dataFile[x]['new']
      };
      completed.push(new Promise(resolve, reject){
        Masterdata.compareData(param, function(err, rows) {
          if(err)
          {
            reject(err);
          }
          else
          {
            console.log(rows);
            outputFile.push(rows); //that;s pretty enough
            resolve();
          }
        });
      });
    }
  }
}
Promise.all(completed)
 .then((res)
 {
   console.log(outputFile);
 });

【讨论】:

  • 我试过了,但是 outputFile 返回 Undefined 如何让它同步?谢谢
  • 哦,抱歉,我没有注意到 Masterdata.compareData 是异步的。这样,您应该使用承诺或回调。我编辑了我的示例以展示如何使用 Promise 进行归档。
猜你喜欢
  • 1970-01-01
  • 2018-08-30
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
相关资源
最近更新 更多