【发布时间】:2019-02-05 14:43:00
【问题描述】:
我需要在一个函数中填充一个数组并在另一个函数中使用这个数组。但是,当我在不同的函数中检查该数组时,它会返回一个空数组。
这是我的示例代码:
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 函数期间推送的所有列值,但它只是打印出 []
【问题讨论】:
-
COLUMN_NAME指的是results数组的每个对象内的某个子对象? -
我感觉您遇到了时间问题:
results是否被异步填充(例如通过 AJAX 请求)?这或许可以解释为什么记录columns返回一个空数组。你能告诉我们什么在调用getcolumns()吗? -
@Terry 在我看来是正确的答案。将
updateworkbook()改成异步函数,让console.log(columns);等待getcolumns();完成。 -
@Terry,编辑了问题以包含几乎整个代码。我正在通过这个监听 ajax 请求并为此调用 getcolumns() 。但是,我并不完全清楚如何使 updateworkbook 功能异步
-
我已经用异步代码更新了我的示例
标签: javascript arrays ajax