от
На этот вопрос уже есть ответ здесь: Как я могу вернуть ответ от асинхронного вызова? 35 ответов Я использую угловые,NodeJS, MySQL и мне нужно получить возвращаемое значение из запроса MySQL в другую функцию. это возможно как следующий код мне нужно получить данные из запроса от другой функции, но я не в состоянии получить сведения об адресе пользователя. любое решение для вам подробности? спасибо
exports.getUserDetails= (req, res) => {
    sql = 'SELECT * FROM users ';
    connection.query(sql, (error, results, fileds) => {
        if(error) {
            res.send({
                "success" : false,
                "message" : "Error : " error.message
            });
        }
        else {
            if(results.length >0) { 
                let users = [];
                results.forEach(user => {
                    let addressDetas = this.getUserAddress(user.id);
                    let userdata = {}
                    userdata = user;
                    userdata.address = addressDetas; 
                    users.push(userdata);
                });
                res.send({
                    "success" : true,
                    "message" : "No Record ",
                "result" : users
                });
            }
            else {
                res.send({
                    "success" : true,
                    "message" : "No Record ",
                    "result" : results
                });
            }
        }
    });
}

exports.getUserAddress= (userid) => {
sql = 'SELECT * FROM address WHERE user_id = "' userid '" ';
    connection.query(sql, (error, results, fileds) => {
        if(error) {
            return error;
        }
        else {
            return results;
        }
    });
}

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Это не
getUserAddress
, что возвращается, это обратного вызова, переданной в
connection.query
. если вы хотите получить результаты запроса, вам нужно пройти в свою собственную функцию обратного вызова (обычно в качестве последнего аргумента) в
getUserAddress
. Однако, произошли существенные особенности синтаксиса, чтобы помочь вам писать код в синхронном стиле, глядя, в частности,
Promise
и
async
и
await
запросам. Если вы перепишите вашу функцию с помощью этих, Вы сможете использовать его, как вы намерены. Что-то вроде:
const until = require ('util'):

exports.getUserAddress = async function (userId) {
  const SQL = select etc....'';
  const query = until.promisify(connection.query);
  return await query(sql,);
}
И использовать его как это:
async function printAddress() {
  const address =await getUserAddress(123);
  console.log(address);
}
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...