Я пытаюсь получить несколько документов из MongoDB и отправить все данные в массиве, но у меня возникли серьезные проблемы с пониманием того, как это можно сделать с помощью Node.js.Сложность асинхронного кодирования Node.js
Проблема в том, что в момент выполнения dataArray.push(tempObject)
tempObject["data"] = tempDataArray
еще не выполнен.
Мой код выглядит следующим образом:
app.post('/api/charts', function(req, res) {
var names = req.body.names;
var categories = req.body.categories;
var dataArray = [];
for (i = 0; i < names.length; i++) {
var tempObject = {};
tempObject["name"] = names[i];
Company.find({ name : names[i] }, function(err, result) {
if (err) {
throw err;
}
var tempDataArray = [];
for (k = 0; k < categories.length; k++) {
var tempDataObject = {};
tempDataObject["name"] = categories[k];
tempDataObject["numbers"] = result[0]["data"][categories[k]]["numbers"];
tempDataObject["dates"] = result[0]["data"][categories[k]]["dates"];
tempDataArray.push(tempDataObject);
}
tempObject["data"] = tempDataArray;
});
dataArray.push(tempObject);
}
res.send(dataArray);
});
Любые предложения о том, как правильно достичь желаемого результата будут оценены.
Вы можете использовать объекты Promise в Nodejs? – Savaratkar
У меня были схожие трудности с пониманием того, как это работает. Взгляните на [это] (http://stackoverflow.com/questions/15852043/mongoose-find). Короче говоря, вам нужно опубликовать все процессы, когда у вас есть данные - то есть в вашем обратном вызове при поиске, как в упаковке, так и при отправке ответа, как сказал @kyrylkov. – Pio