У меня проблемы с пониманием асинхронных методов на nodejs.
У меня есть этот фрагмент кода в моем контроллере:
app.get(basePath, function (req, res, next) {
model.generateDB(function (modelErr, modelRes) {
if (modelErr) console.log('Error: ' + modelErr);
next(res.send(modelRes));
});
});
этот фрагмент кода для модели:
generateDB: function (next) {
BDManager.query(
'INSERT INTO tableName' +
'(field1, field2) VALUES ("a", "b")',
function (err, res) {
next(err, res);
});
}
и этот фрагмент кода для менеджера БД
query: function (sql, next) {
var con = mysql.createConnection(config.MySQL);
con.query(sql, function (err, res) {
if (err) next(err, null);
next(null, res);
});
con.end();
}
У меня отлично работает. вопрос в том, как я могу иметь несколько запросов с ответами в модели только с одним вызовом контроллера, как в примере (это не работает):
BDManager.query(
'INSERT INTO tableName' +
'(field1, field2) VALUES ("a", "b")',
function (err, res) {
next(err, res);
});
BDManager.query(
'INSERT INTO tableName' +
'(field1, field2) VALUES ("a", "b")',
function (err, res) {
next(err, res);
});
BDManager.query(
'INSERT INTO tableName' +
'(field1, field2) VALUES ("a", "b")',
function (err, res) {
next(err, res);
});
Идея может заключаться в том, чтобы получить массив ошибок и ответов, но я не знаю, как отправить его, когда все запросы завершатся. Я пробовал с .then, но, похоже, он не работает (ошибка, которую я получаю при использовании .then - «затем нельзя использовать при нулевом значении»).
Другое решение может заключаться в объединении множества запросов в один, но я пробовал с разделителем «;» и у меня не работает.