2016-11-25 2 views
0

Node에서 'user-management'패키지를 사용하고 있으며 콜백 내에서 콜백 내 콜백 내에 있습니다. 그러나 최종 결과는 반환되지 않습니다. ,콜백 내 JavaScript/NodeJS 콜백

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"; 
    } 
}); 

그래서 내가 "로드"기능 콜백에 값을 반환해야 같은데요 :

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); 
     } 

    }); 

가 그럼 난 함수의 외부 모듈이 : 이것은 내 주요 NodeJS 모듈입니다 하지만 어떻게해야할지 모르겠다.

+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"); 
    } 
});