我希望这是一个简单的问题,而我只是错过了一些简单的事情。我有一连串的承诺返回函数,这些函数使用.then()进行流动。我的最后一个函数接收我返回的数据,并将其格式化为正确的格式,然后将其传递回客户端。我遇到的问题(我认为)是服务器在解决格式功能的承诺之前将ff变量发送给客户端。令我困惑的是,当我记录ff变量时,它正在按预期记录所有数据。
关于这种情况为什么发生,我在做什么错以及最重要的是如何解决这一问题的任何想法?
app.get("/subData", function(req, res) {
getConnection().then(function() {
return getSQL();
}).then(function(sql) {
return executeQuery(sql);
}).then(function(data) {
return formatData(data);
}).then(function(ff) {
console.log(ff);
res.status(200).send(ff);
}).catch(function(err) {
console.log("ERR:");
console.log(err);
res.status(405).send(err);
});
});
这是最终的格式数据功能:
function formatData(data) {
var finArr = Array();
return new Promise(function(resolve, reject) {
data.rows.forEach(function(row, fin) {
var tempArr = Array();
row.forEach(function(itm, pos) {
var ttl = data.metaData[pos].name;
var val = itm;
tempArr[ttl] = val;
});
finArr.push(tempArr);
if(fin + 1 == data.rows.length) {
resolve(finArr);
}
});
});
}
这个问题与正确解决承诺无关。问题在于我如何格式化数据以将其发送回客户端。我正在使用以下代码构建关联数组的数组。当将其发送到客户端时,它以空白数组形式发送。
data.rows.forEach(function(row, fin) {
var tempArr = Array();
row.forEach(function(itm, pos) {
var ttl = data.metaData[pos].name;
var val = itm;
tempArr[ttl] = val;
});
finArr.push(tempArr);
});
return finArr;
我需要做的是将数据作为对象数组发送,然后在客户端将其转换为数组数组。通过调整我的代码,数据可以根据需要正确传递。
data.rows.forEach(function(row, fin) {
// Change From var tempArr = Array() to var tempArr = {} to initialize new Object
var tempArr = {};
row.forEach(function(itm, pos) {
var ttl = data.metaData[pos].name;
var val = itm;
tempArr[ttl] = val;
});
finArr.push(tempArr);
});
return finArr;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句