msa6886
@msa6886

Как вернуть значени из модуля из асинхроной функции?

module.exports.person = function(){
    (async function foo(){
        let data = '';
        data = await sqlQuery();

    }());
  • Вопрос задан
  • 148 просмотров
Решения вопроса 2
@levchak0910
answer.correct ? press({correct: true}) : next()
Модуль:
exports.getPerson = function(id) {
    return new Promise((resolve, reject) => {
        // Любая асинхронная операция. Например:
        sql.query(`select * from users where id='${id}'`, data => {
            // Если запрос произошел успешно
            resolve(data);
        }, error => {
            // Если с ошибкой
            reject(error);
        });
    });
};

Используем где надо:
let {getPerson} = require("path/to/module");
let person = await getPerson('some id');
Ответ написан
Комментировать
rockon404
@rockon404
Frontend Developer
Если вы хотели вернуть результат из person то так:
module.exports.person = async () => await sqlQuery();

Другое дело, что async/await тут и не нужны.
Их использование было бы оправдано сели бы надо было сделать что-то вроде:
module.exports.person = async () => [await sqlQuery1(), await sqlQuery2()];

или:
module.exports.person = async id => {
  const user = await getUser(id);
  const permissions = await getPermissions(user.role);
 
  return {
    user,
    permissions,
  };
}

В вашем случае достаточно:
module.exports.person = args => sqlQuery(args);
А использовать уже можно в асинхронных функциях:
const user = async person(id);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы