首页 > 解决方案 > 在另一个函数中使用填充在一个函数中的数组

问题描述

我需要在一个函数中填充一个数组并在另一个函数中使用这个数组。但是,当我在不同的函数中检查该数组时,它会返回一个空数组。

这是我的示例代码:

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 函数期间推送的所有列值,但它只是打印出来[]

标签: javascriptarraysajax

解决方案


我想补充一点,使用全局变量是一种不好的做法,因为它可能导致难以调试的问题。如果可以,请不要使用它们。

考虑将您的代码重写为:

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);
   });

}

推荐阅读