2016-11-25 10 views
0

Я использую пакет управления «user-management» в узле, и у меня есть обратный вызов в обратном вызове в рамках обратного вызова. Но окончательный результат не возвращается. Это мой главный NodeJS модуль:JavaScript/NodeJS Обратный вызов в обратном вызове

playerManagement.login(data.username, data.pw, function (result) { 

     console.log(result) <-- statement never reached 

     if (result == "fail") { 
     socket.emit('client', { type: 'login', result : 'fail'}); 
     } else { 
     connections[playerindex++] = {'username' : username, 'sockid' : socket.id, 'token' : result }; 
     socket.emit('client', { type: 'login', result : 'success', username : username }); 
     console.log(connections); 
     } 

    }); 

Тогда у меня есть внешний модуль с функцией:

playerModule.prototype.login = function(username, password) { 

var o = this; 

o.user.load(function (err) { 
    if (!err) { 
     o.user.authenticateUser(username, password, function(err, result) { 

      if (!result.userExists) { 
       console.log('Invalid username'); 
       return "fail"; 
      } else if (!result.passwordsMatch) { 
       console.log('Invalid password'); 
       return "fail"; 
      } else { 
       console.log('User token is: ' + result.token); <--- this is reached. 
       return result.token; 
      } 
     }); 
    } else { 
     console.log('error logging in'); 
     return "fail"; 
    } 
}); 

Так я предполагаю, мне нужно, чтобы вернуть значение к «нагрузки» функции обратного вызова, но я не уверен, как это сделать.

+0

Вы должны использовать обещания. – SLaks

+0

Если вы хотите принять обратный вызов, вам действительно нужно иметь параметр обратного вызова и вызвать его. – SLaks

+0

Поскольку определение функции 'login' не имеет обратного вызова в качестве аргумента, –

ответ

1

Измените определение login на следующее.

playerModule.prototype.login = function(username, password, callback) { 

    var o = this; 

    o.user.load(function (err) { 
    if (!err) { 
    o.user.authenticateUser(username, password, function(err, result) { 

     if (!result.userExists) { 
      console.log('Invalid username'); 
      return callback("fail"); 
     } else if (!result.passwordsMatch) { 
      console.log('Invalid password'); 
      return callback("fail"); 
     } else { 
      console.log('User token is: ' + result.token); <--- this is reached. 
      return callback(result.token); 
     } 
    }); 
    } else { 
    console.log('error logging in'); 
    return callback("fail"); 
    } 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^