javascript - 回调的响应问题

标签 javascript node.js mongodb express callback

我想我在这里遗漏了一些简单的东西,但我认为我已经看得太久了。

我最初在函数内联中有您在此处看到的内容,但想将其提取出来并在我的应用程序的其他方面使用它,但我似乎无法将预期信息获取到 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@email.com';
    let a = lookUpUserId(obj);
    res.send(a);
});

现在在服务器的控制台中,我得到了预期的信息:

{_id:someIdHere }

但是,在客户端响应我的 POST 时,我得到一个空体。

谁能在这里指出我正确的方向。

最佳答案

lookUpUserId 异步工作。由于您没有使用 promise ,您可以将回调作为 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);

关于javascript - 回调的响应问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45393917/

相关文章:

svn - 如何为 Node.js 构建 svn 客户端库

node.js - Node mongo-native findAndModify 回调

node.js - PB mongodb、 Mongoose 、node.js

node.js - 如何返回 mongoDB 数组中值的最大出现次数

javascript - 内容页面中的 jquery 不起作用(asp.net)

javascript - 单击图像时如何将 vimeo 播放器添加到弹出窗口中..???

javascript - 是否使用 ".click()"异步触发事件监听器?

javascript - Node 的通用日志记录,快速应用程序——最佳实践?

javascript - 如何在 Javascript 中将 lambda 作为参数传递?

javascript - Mongoose 批量更新/保存