Я новичок в NodeJS и изо всех сил стараюсь найти решение для создания функции повторного использования для выполнения запроса (переданного через параметр), а затем просто вернуть ответ вызывающему абоненту , Я хочу сделать это так, потому что будет более 100 функций, требующих запросов к базе данных, и это поможет уменьшить размер кода.NodeJS MySQL Async- Возвращаемый объект обратно к функции вызывающего абонента
Я пробовал следующее как очень примитивный тест, но функция dbA_Read_Data() всегда возвращает undefined
, потому что она асинхронна. Однако через 6 дней и более 15 альтернативных решений обратного вызова/обещаний, которые работают для некоторых, не сработали для меня, и я не ближе к решению этой проблемы и выполнению следующего.
const { Databases } = require('../../utils/enums');
var mysql = require('mysql');
function getAllUsers() {
//This function would be called when an endpoint is hit in my HapiJS system.
var myQuery = "SELECT * FROM Users WHERE Account_Status== 'ACTIVE' ";
var response = dbA_Read_Data(myQuery);
return response;
}
//dbA => website database, contains users/permissions/etc
//Other databases... you get the idea
function dbA_Read_Data(query) {
dbConn = createConnection("localhost", Databases.db_A.name, Databases.db_A.username, Databases.db_A.password);
dbConn.connect();
dbConn.query(query, function(err, rows, fields) {
if (err) throw err;
var myResponseObject = {
query: query,
data: {
count: rows.length,
records: rows
}
}
});
}
function createConnection(host, database, user, password) {
var connection = mysql.createConnection({
host: host,
user: user,
password: password,
database: database
});
return connection;
}
Как получить функцию dbA_Read_Data(query)
вернуть объект ответа функции вызывающего абонента?
Я прочитал это в 3 раза и пытавшихся следовать за ним, но я все равно либо получаю неопределенные, либо просто ошибки. Мне нужно немного более конкретное руководство. – user5156141
Вы всегда получите неопределенное, если вы ничего не вернете из функции. Вы не можете «просто вернуть ответ вызывающему». Это невозможно сделать с асинхронным ответом. Прекратите пытаться вернуть ответ и вместо этого отправить Promise. Связанный вопрос объясняет, как это сделать. – Paulpro