2016-11-25 9 views
0

Nodeで '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"); 
    } 
}); 
関連する問題