javascript - 在另一个函数中使用填充在一个函数中的数组
问题描述
我需要在一个函数中填充一个数组并在另一个函数中使用这个数组。但是,当我在不同的函数中检查该数组时,它会返回一个空数组。
这是我的示例代码:
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 函数期间推送的所有列值,但它只是打印出来[]
解决方案
我想补充一点,使用全局变量是一种不好的做法,因为它可能导致难以调试的问题。如果可以,请不要使用它们。
考虑将您的代码重写为:
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);
});
}
推荐阅读
- ios - UITableViewCell 忽略自动布局
- asp.net-mvc - MVC Core 中的模型绑定空值
- postgresql - Postgres - 删除操作未完成
- javascript - 在滚动条中设置背景透明不会显示其下方的文本
- f# - 函数参数中的通用模式匹配
- python - 零的滚动平均值未按预期返回零
- python - 编写 python 函数,使用 groupby 对每种索引类型的某些行的值求和
- laravel - Laravel 会话 ID 在每个请求上都会更改
- google-cloud-platform - 基于非结构化数据构建 Google Cloud Platform 数据目录
- node.js - 尝试安装 Windows 构建工具时出错