在另一个函数中使用在一个函数中填充的数组

时间:2019-02-05 14:43:00

标签: javascript arrays ajax

我需要在一个函数中填充一个数组,然后在另一个函数中使用此数组。但是,当我在其他函数中检查该数组时,该数组将返回一个空数组。

这是我的示例代码:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var server = require('http').createServer(app);
var path = require('path');
var port = process.env.PORT || 3004;

let columns = new Array ();

server.listen(port, function () {
  console.log('Server listening at port %d', port);
});

//Server receives AJAX requests of JSON Data
app.use(bodyParser.json()); // for parsing application/json
// for parsing application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(express.static(path.join(__dirname, 'public')));

app.post('/', function (req, res) {
  updateworkbook(req.body); 
  res.send('Thanks for the data.');
});

//Here's where I'm using 'columns'
function updateworkbook(data) {
  getcolumns();
  console.log(columns);
  // some code to write back data to MYSQL which depends on 'COLUMNS'
}


//Here's where I'm populating 'columns' array
function getcolumns() {
  //Code to get a RowDataPacket object as 'results' from MySQL
  for (let i = 0; i < results.length; i++) {
    columns.push(results[i]['COLUMN_NAME'])
  }
  console.log(columns)  //This works perfectly fine and prints out all the values
  return columns;
};

我希望看到在getcolumns函数期间已推入的所有列值,但它只是打印出[]

3 个答案:

答案 0 :(得分:0)

我想添加using global vars is a bad practice,因为它可能导致难以调试的问题。如果可以,请不要使用它们。

考虑将您的代码重写为此:

function getcolumns()
{
   return new Promise(function(resolve, reject)
   {
       var columns = [];
       // populate the columns array asynchronously
       resolve(columns);
   });


}


function updateworkbook()
{
   getcolumns().then(function(cols){
      // do something with the value
      console.log(cols);
   });

}

答案 1 :(得分:0)

我假设var stage = new createjs.Stage("canvas"); stage.addChild(exportRoot); // Animate stage.addChild(new createjs.Bitmap("path/to/bitmap")); // Custom createjs.Ticker.on("tick", stage); 中有一个AJAX请求,这需要一些时间才能完成。此外,尝试远离使用全局变量。

考虑将计算流程更改为异步,从而导致(未测试):

getcolumns()

答案 2 :(得分:-1)

在我的情况下,它可以正常工作,下面是代码: enter image description here 这是输出:

enter image description here

您发布的代码没有错。您可能会遇到计时问题[注释中建议的异步操作]