我已经阅读了很多这方面的答案,他们给我的只是解释异步函数以及它们如何在JavaScript中工作。我仍然对如何完成这项工作一无所知。
所以我有这个功能:
function validateInput(data) {
var errors = {};
var testuser = {};
console.log('LOG 1: errors', errors);
User.find({email: data.email }, function(err, user) {
if (user) {
errors.email = 'Email already exists';
testuser = user; // This doesn't set testuser in function scope
console.log('LOG 2: test user', testuser);
}
});
console.log('LOG 3: user', testuser); // test user is null despite having set it in callback
console.log('LOG 4: errors', errors);
return errors;
}
当我运行此功能时,我的console.logs按以下顺序排列:
LOG 1: errors {}
LOG 3: user {}
LOG 4: errors {}
LOG 2: [
{
username: 'John',
email: 'john@test.com',
password: 'john',
passwordConf: 'john',
}
]
这个结果,(尽管LOG 2在我的代码中出现了第二个这一事实,但是在阅读了有关异步函数的内容之后)现在对我有意义。
我的目标是将user
中的回调函数返回的User.find()
(异步调用)传递给函数范围的变量testuser
。
我将不胜感激。