Я немного новичок в NodeJS и асинхронных операциях, поэтому простите меня, если я делаю очевидные ошибки здесь.Передача массивов JSON с водопадом Async
Я пытаюсь выполнить цикл из ячеек Excel, ping ряд API с их соответствующими значениями и объединить их в объект conData, который я буду нажимать на массив.
Мой вопрос в том, как я могу объединить JSON в один массив и отправить его моему клиенту?
router.post('/load', multipartMiddleware, function (req, res, next) {
async.waterfall([
function (done) {
var workbook = new Excel.Workbook();
workbook.xlsx.readFile(req.files.file.path)
.then(function() {
var worksheet = workbook.getWorksheet(1)
var colH = worksheet.getColumn(8)
var dataArray = []
colH.eachCell(function(cell, rowNumber) {
var conNoteNumber = cell.value
starTrack.getGuid(conNoteNumber, function (guid) {
starTrack.getConEvents(guid[0], function (events) {
var last = _.last(events)
starTrack.getConSummary(guid[0], function (summary) {
var conData = {
rowNum: rowNumber,
conNum: conNoteNumber,
date: last['EventDate'],
time: last['Time'],
location: last['Location'],
status: last['Status'],
time: last['Time'],
summary: summary['StatusDescription']
}
dataArray.push(conData)
done(null, dataArray)
})
})
})
})
})
}
], function done(err, dataArray) {
// console.log(bundle)
if (err) return next(err);
// console.log(dataArray)
res.end()
})
Не могли бы вы пояснить вопрос? Код, который вы опубликовали, кажется, в основном правилен. Что вы делаете, чего не хотите, или что вы делаете, чего не хотите? –
Спасибо Крис - по сути, в colH.eachCell Я перебираю каждую строку и делаю серию вызовов API - объект conData в точке, где он создан, представляет собой по существу 1 единицу. Несмотря на то, что я нажимаю объекты conData json на dataArray, когда консоль регистрирует его в моей последней операции async, я получаю только один объект. –
Ah - так что ваша проблема действительно зная, когда все вызовы api, которые вы делаете в этом цикле, выполняются, чтобы вы могли передать окончательный агрегированный результат в 'dataArray'? –