Функция Nodejs с параметром и обратным вызовом не работает

Я пишу API, чтобы получить сотрудника по идентификатору, но проблема, с которой я сталкиваюсь, заключается в том, что контроллер вызывает другую функцию в службе и передает параметр и обратный вызов этой функции. Но когда функция вызывает обратный вызов, я получаю сообщение об ошибке. Код ниже. Я просмотрел онлайн-примеры и попытался устранить неполадки, но потерпел неудачу. У меня есть аналогичная настройка для метода getall, у которого нет параметра, и, похоже, он работает нормально. Код ниже.

Код контроллера есть.

  function getById(req, res, next) {
    userService.getById(req.params.id, (results) => {
      res.json(results);
        })
      .catch(err => next(err));
      }

Сервисный код есть.

 async function getById(id, callback) {database.query('SELECT * FROM employee WHERE id =' +id, (err, results) => {
       if (err) {
       callback(err);
       } else
        callback(results);
       });
      }

Ошибка, которую я получаю:

TypeError: callback is not a function
    at Query.database.query (/user.service.js:52:7)
    at Query.<anonymous> (/Connection.js:525:10)
    at Query._callback (/Connection.js:491:16)
    at Query.Sequence.end (/Sequence.js:83:24)
    at Query.ErrorPacket (/Query.js:90:8)
    at Protocol._parsePacket (/Protocol.js:291:23)
    at Parser._parsePacket (/Parser.js:433:10)
    at Parser.write (/Parser.js:43:10)
    at Protocol.write (/Protocol.js:38:16)
    at Socket.<anonymous> (/Connection.js:91:28)
    at Socket.<anonymous> (/Connection.js:525:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at TCP.onread (net.js:639:20)

Вы запутались, смешивая подход обещания и подход обратного вызова. Используйте тот или иной... обещание чище

charlietfl 12.07.2019 20:00

Можете ли вы привести пример наилучшего подхода

zee123 12.07.2019 20:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы смешиваете понятия:

function getById(req, res, next) {
    UserService.getById(id)
        .then(res => console.info(res))
        .catch(err => console.error(err))
}


function getById(id) {
    return new Promise((resolve, reject) => {
        database.query('SELECT * FROM employee WHERE id =' + id, (err, results) => {
            if (err) 
                reject(err)

            resolve(results)
        });
    })
}

это работает, но по какой-то причине, когда я помещаю console.info(id) перед обещанием возврата, он регистрируется дважды: один раз undefined, второй раз с параметром url. это приводит к его сбою. Вы хоть представляете, почему это происходит?

zee123 12.07.2019 21:19

Другие вопросы по теме