2013-01-10 2 views
0
function getUsernameAssociatedWithToken (token) { 

    console.log('\n\t\tgetUsernameAssociatedWithToken'); 
    console.log("\t\t"+token); 
    var userReturn = ""; 


    queryAsync(returnVal); 

    function queryAsync(callback){ 
     connection.query("SELECT * FROM users WHERE token = '"+token+"'", function (error, results, fields) { 

      if (error) { 
       console.log(error); 
       callback(null); 
      } 

      if (results.length > 0) { 

       userReturn = results[0].user; 
       callback(userReturn); 


      } else { 

       callback(null); 
      } 

     }); 
    }; 

    function returnVal(str){ 

    userReturn = str; 
    console.log('vaaaaal'); 
    console.log(userReturn); 

    } 
    return userReturn; 

} 

쿼리 함수가 실행되기 전에 마지막 "return"이 호출됩니다. 콜백을 사용하면 어떻게 될까요?다른 함수가 실행되기 전에 노드 js functon이 반환됩니다.

나는이 시도했지만이 또한 실패

function getUsernameAssociatedWithToken (token) { 

    console.log('\n\t\tgetUsernameAssociatedWithToken'); 
    console.log("\t\t"+token); 
    var userReturn = ""; 




    function queryAsync(){ 
     connection.query("SELECT * FROM users WHERE token = '"+token+"'", function (error, results, fields) { 

      if (error) { 
       console.log(error); 
       return null; 
      } 

      if (results.length > 0) { 

       userReturn = results[0].user; 
       return userReturn; 


      } else { 

       return null; 
      } 

     }); 
    }; 

return (queryAsync()); 

} 

답변

3

당신은 직접 함수에서 비동기 호출의 결과를 반환 할 수 없습니다 (당신이 보았 듯이) 비동기 전에 함수가 반환하기 때문에 통화가 완료되었습니다. 대신, 함수는 비동기 호출이 완료 될 때 결과를 호출자에게 전달하기 위해 호출 할 콜백 매개 변수를 지원해야합니다.

function getUsernameAssociatedWithToken (token, callback) { 
    ... 
    queryAsync(callback); 
} 
+0

xx! 네, 제가 현재하고있는 일입니다. 2 분 안에 대답을 수락합니다. – stackOverFlew

관련 문제