объявление глобальное
let veh = {
data: []
}
Основано на моей серии асинхронных операций ниже. Во-первых, я получаю данные из vehicle.model, а затем присваиваю veh.data = vehicle (что является результатом), а затем использую идентификатор транспортного средства для запроса сборов. Теперь результат, который я получил из коллекций, я хотел добавить или добавить эти данные в veh.data, поэтому во втором запросе вы можете увидеть строку
if (finalFile) {
veh.data[i].FileData = finalFile
}
, но когда я проверяю окончательный результат, FileData не былдобавлено. Любая проблема с асинхронными запросами?
Первый запрос в асинхронной серии (результат veh.data = vehicle)
async.series([
function (next) {
Vehicle.model.count({}, function (err, totalCount) {
if (err) {
response = { "error": true, "message": "Error fetching data" }
}
Vehicle.model.find(query, {}, pagination).sort(sortOrd + sortType).exec(function (err, vehicle) {
if (err || !vehicle) {
res.json({
message: err
})
}
var totalPages = Math.ceil(totalCount / size)
if (vehicle) {
veh.data = vehicle
}
return next();
})
})
},
Второй запрос
}, функция (далее) {
MongoClient.connect(url, function (err, client) {
if (err) {
return res.render('index',
{
title: 'Uploaded Error',
message: 'MongoClient Connection error', error: err.errMsg
});
}
const db = client.db(dbName);
const collection = db.collection('fs.files');
const collectionChunks = db.collection('fs.chunks');
for (let i = 0; i < veh.data.length; i++) {
let ImageList = veh.data[i].ImageList.split(',')
let profile_name = ImageList[0].split('/').pop();
collection.find({
$and: [
{ $or: [{ metadata: veh.data[i].VIN }] },
{ $or: [{ filename: profile_name }] }
]
}).toArray(function (err, docs) {
if (err) {
return res.render('index', {
title: 'File error',
message: 'Error finding file',
error: err.errMsg
});
}
if (!docs || docs.length === 0) {
return res.render('index', {
title: 'Download Error',
message: 'No file found'
});
} else {
for (let i = 0; i < docs.length; i++) {
collectionChunks.find({ files_id: docs[i]._id })
.toArray(function (err, chunks) {
if (err) {
return res.render('index', {
title: 'Download Error',
message: 'Error retrieving chunks',
error: err.errmsg
});
}
if (!chunks || chunks.length === 0) {
return res.render('index', {
title: 'Download Error',
message: 'No data found'
});
}
let fileData = []
for (let i = 0; i < chunks.length; i++) {
fileData.push(chunks[i].data.toString('base64'));
}
let finalFile = 'data:' + docs[0].contentType + ';base64,'
+ fileData.join('');
if (finalFile) {
veh.data[i].FileData = finalFile
}
});
}
console.log("Resulta1 :" , veh.data)
}
})
}
return next();
})
FileData существует, когда я назначил его для второго запроса в серии, но когда я проверяю veh.data в третьем FileData не был добавлен.
The Third
}, function (next) {
return res.status(200).send({
message: "success",
pageNo: pageNo,
totalRecords: veh.data.length,
data: veh.data,
// totalPages: totalPages
})
}
Почему эти FileData не были добавлены к конечному результату каждого объекта в массиве объектов, который является veh.data? который находится на третьей функции?