2012-07-22 5 views
1

Java에서 제공되는 Javascript를 처음 사용하고 Java 메소드처럼 작동하는 Function을 작성하려고합니다. 문제는 호출하는 코드가 호출 된 함수를 마칠 때까지 기다리지 않고 단지 발생한 오류 만 계속하는 것입니다. 내가 무슨 말하는지 이해했으면 좋겠어. 어쩌면 당신은 나를 도울 수 있습니다코드가 콜백 함수 완료를 기다리지 않습니다.

if (Titanium.Facebook.loggedIn) { 
     // User is not logged in with his ACS Account but with its Facebook Account 
     // now we can check if he has an ACS Account with the same eMail Address 
     Titanium.API.info('User seems to be logged in to Facebook'); 

     gFacebookAccount = gFacebookController.getLoggedInFacebookAccount(); 
     Titanium.API.info('Logged In Facebook Account is : '+ gFacebookAccount); } 

getLoggedInFacebookAccount는 다음과 같이 보입니다. 나는 타임 아웃 루프에 의해 메소드를 지연 시키려고 노력했다.

exports.getLoggedInFacebookAccount = function() 
{ 
Titanium.API.info('Started getLoggedInFacebookAccount'); 
var lCallBackFinished = false; 
var lActualUser = null; 
Titanium.Facebook.requestWithGraphPath('me', {}, 'GET', handleGraphRequestCallback); 

waitForQueryCallback(); 


function waitForQueryCallback() { 
    if (!lCallBackFinished) { 
     Titanium.API.info('Wait for Query Callback Loop'); 
     setTimeout(waitForQueryCallback, 100); 
     // 
    } 
    else 
    { 
     return lActualUser; 
    } 
} 


function handleGraphRequestCallback(pGraphCallback) { 

// damn callbacks - now here the user is logged in 
// and the Graph Request is (sucessfully or not) finished 

Titanium.API.info('Start handleGraphRequest-Callback'); 
if (pGraphCallback.success) { 
    Titanium.API.info('Graph Request Callback Sucessful'); 
    lActualUser = pGraphCallback.result; 

} else { 
    Titanium.API.info('Graph Request Callback Not Sucessful'); 

} 

lCallBackFinished = true; 

} 

} 

콘솔 출력은 다음과 같습니다 라인의

[INFO][TiAPI ( 301)] User seems to be logged in to Facebook 
[INFO][TiAPI ( 301)] Started getLoggedInFacebookAccount 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][TiAPI ( 301)] Logged In Facebook Account is : undefined 
[INFO][TiAPI ( 301)] Function called 
[ERROR][TiJSError( 301)] (main) [214,2413] ----- Titanium Javascript Runtime Error ----- 
[ERROR][TiJSError( 301)] (main) [0,2413] - In undefined:1,1 

[ERROR][TiJSError( 301)] (main) [0,2413] - Message: Uncaught SyntaxError: Unexpected token u 
[ERROR][TiJSError( 301)] (main) [1,2414] - Source: undefined 
[ERROR][V8Exception( 301)] Exception occurred at undefined:1: Uncaught SyntaxError: Unexpected token u 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][TiRootActivity( 301)] (main) [0,0] checkpoint, on root activity resume. activity = [email protected] 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][ARMAssembler( 60)] generated scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x3666d0:0x36678c] in 4662744 ns 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][ActivityManager( 60)] Displayed activity de.dosofun.knowitall/.Knowitall2Activity: 5509 ms (total 5509 ms) 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][TiAPI ( 301)] Wait for Query Callback Loop 
[INFO][TiAPI ( 301)] Start handleGraphRequest-Callback 
[INFO][TiAPI ( 301)] Graph Request Callback Sucessful 

원인 : [INFO] [TiAPI (301)] 페이스 북 계정에 기록됩니다 당신이 코드가 될 때까지 기다리 나던 것을 볼 수 있습니다 정의되지 않은 소위 말하는 방법이 끝났습니다.

무엇 내 코드로 바란 작품 있도록 필요하며, 내 코드 (읽기 혼란에없는) 더 좋은 방법 당신의 도움에 대한

감사가 무엇인지, 아주 나쁜 경우

+0

'lActualUser'를 (를) 직접 반환합니까? –

답변

0
wait_var = waitForQueryCallback(); 
YOU ARE NOT HANDLING THE RETURN FROM waitForQueryCallback() here... 

function waitForQueryCallback() { 
if (!lCallBackFinished) { 
    Titanium.API.info('Wait for Query Callback Loop'); 
    setTimeout(waitForQueryCallback, 100); 
    // 
    RETURN SOMETHING HERE? 
} 
else 
{ 
    return lActualUser; 
} 
} 

시도하고 waitForveryCallback()에서 wait_var 처리하고 콜백 isnt 완료되면 뭔가 반환하십시오.