Проблема ответа с обратным вызовом

1

Я думаю, что мне не хватает чего-то простого здесь, но думаю, что я слишком долго смотрел на это.

Первоначально у меня было то, что вы видите здесь в функции inline, но хотели бы вытащить ее и использовать ее в других аспектах моего приложения, но я не могу представить предполагаемую информацию в ответ POST.

Здесь моя функция:

let lookUpUserId = (x) => {
  mongo.connect(url, (err,db) => {
    assert.equal(null,err);
    db.collection('data').findOne({"email": {'$eq' : x }},{"_id":1}, (err,result) => {
      console.log(result); // I'm getting the correct response here.
      assert.equal(null,err);
      db.close();
      return result; // This seems to be returning empty
    });
  });
};

И вот здесь, где я называю это (упрощенный):

router.post('/test1', (req,res,next) => {
    console.log('Hit on POST /test1');
    let obj = '[email protected]';
    let a = lookUpUserId(obj);
    res.send(a);
});

Теперь в консоли сервера я получаю ожидаемую информацию:

{_id:someIdHere }

Тем не менее, я получаю пустое тело в ответ на мой POST на стороне клиента.

Может ли кто-нибудь указать мне в правильном направлении здесь.

Теги:
callback
express

1 ответ

2
Лучший ответ

lookUpUserId работает асинхронно. Поскольку вы не используете обещания, вы можете передать обратный вызов в качестве второго аргумента функции lookUpUserId:

let lookUpUserId = (x, callback) => {
  mongo.connect(url, (err,db) => {
    assert.equal(null,err);
    db.collection('data').findOne({"email": {'$eq' : x }},{"_id":1}, (err,result) => {
      console.log(result);
      assert.equal(null,err);
      db.close();
      callback(result);
    });
  });
};

и назовите его:

lookUpUserId(obj, (result) => res.send(result));

или даже:

lookUpUserId(obj, res.send);
  • 0
    Здесь опробованы оба решения, первое работает отлично, хотя я не смог заставить сокращенную версию работать должным образом, так как это было через 'req было неопределено'. В любом случае, решено.
  • 1
    Требование @Gates не req was undefined ? Я даже не использовал req здесь.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню