JavaScript:将变量从回调传递到全局范围

时间:2018-05-04 08:18:12

标签: javascript asynchronous mongoose scope

我已经阅读了很多这方面的答案,他们给我的只是解释异步函数以及它们如何在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

我将不胜感激。

0 个答案:

没有答案