【发布时间】:2016-04-29 07:42:53
【问题描述】:
我试图了解 node.js 的异步特性。 我有一条快速路线,我知道它不会提供我需要的数据。基本上,第一个 mysql 查询按预期 100% 工作,并且 res.json 中返回的 json 数据是正确的。然而,在第一个 mysql 函数中,我调用了另一个函数 'getOrderLines()',它总是返回 '{"Item":[]}' 而不是我期望的数据。
我知道这是因为节点的异步性质而发生的,但是我似乎无法解决这个问题,我已经研究了 Promise 并编写了一些基本的 Promise,但无法让它在下面工作。
任何帮助将不胜感激。
router.route('/salesOrders')
.get(function (req, res) {
mysql.query("QUERY", function (err, sql1) {
for (i = 0; i < sql1.length; i++) {
json.Company.SalesOrders.SalesOrder[i] = {
"Id": sql1[i].Id,
"AccountReference": sql1[i].AccountReference,
"SalesOrderDate": sql1[i].SalesOrderDate,
"SalesOrderAddress": [{
"Forename": sql1[i].billFirstname,
"Lastname": sql1[i].billLastName,
"Address": sql1[i].billAddress1
}],
"SalesOrderItems": {}
};
json.Company.SalesOrders.SalesOrder[i].SalesOrderItems = getOrderLines(sql1[i].Id);
} // End first For loop.
res.json(json);
};
};
getOrderLines = function (orderId) {
var orderLineJson = {
"Item": []
};
mysql.query('QUERY', function (err, sql2) {
for (j = 0; j < sql2.length; j++) {
orderLineJson.Item[j] = {
"SKU": sql2[j].name,
"QtyOrdered": sql2[j].quantity,
"UnitPrice": sql2[j].price
};
}
});
return orderLineJson;
};
【问题讨论】:
标签: javascript mysql json node.js asynchronous