我想我在这里遗漏了一些简单的东西,但我认为我已经看得太久了。
我最初在函数内联中有您在此处看到的内容,但想将其提取出来并在我的应用程序的其他方面使用它,但我似乎无法将预期信息获取到 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/