Я знаю эту тему, как уже задавали много раз прежде, но я не нашел правильного ответа, чтобы делать то, что я хочу.
На самом деле, я пытаюсь сохранить два разных списка объекта JSON в MongoDB через Mongoose,Для выполнения обоих одновременно я использую 'async' .Однако, когда я сохраняю его с помощью команды insertMany () , я получаю сообщение об ошибке, потому что он вызывает обратный вызов async перед завершением операции insertMany ().Поэтому ответ [0] не определен.
Каким будет правильный способ сделать это?
Вот мой код с асинхронностью:
const mongoose = require("mongoose");
const async = require("async");
const utils = require("../utils");
const experimentCreate = function(req, res) {
let resData = {};
let experimentList = req.body.experiment;
let datasetList = req.body.datasetList;
async.parallel(
{
dataset: function(callback) {
setTimeout(function() {
answer = utils.createDataset(datasetList);
callback(answer[0], answer[1]);
}, 100);
},
experiment: function(callback) {
setTimeout(function() {
answer = utils.createExp(experimentList);
callback(answer[0], answer[1]);
}, 100);
}
},
function(err, result) {
if (err) {
console.log("Error dataset or metadata creation: " + err);
sendJSONresponse(res, 404, err);
} else {
console.log("Experiment created.");
resData.push(result.dataset);
resData.push(result.experiment);
console.log(resData);
sendJSONresponse(res, 200, resData);
}
}
);
};
Тогдадве функции с именами createExp и createDataset совпадают в другом файле.Как это:
const createDataset = function(list) {
let datasetList = [];
for (item of list) {
let temp = {
_id: mongoose.Types.ObjectId(),
name: item.name,
description: item.description,
type: item.type,
};
datasetList.push(temp);
}
Dataset.insertMany(datasetList, (err, ds) => {
if (err) {
console.log("Error dataset creation: " + err);
return [err, null];
} else {
console.log("All dataset created.");
return [null, ds];
}
});
};