我需要在一个函数中填充一个数组,然后在另一个函数中使用此数组。但是,当我在其他函数中检查该数组时,该数组将返回一个空数组。
这是我的示例代码:
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函数期间已推入的所有列值,但它只是打印出[]
答案 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)