2010-11-25 5 views
0

적절한 설정 변수가 없어도 스크립트가 어떻게 계속 될 수 있습니까? 답변 감사합니다!콜백이없는 변수 설정

코드

function get(param) { 

    // Connect to database and get the response ~ 1 sec 
    db.get(param, function(output) { 

    console.log("Hey, I set the variable!"); 

    return output; 

    }); 

} 

try { 

    var username = get("username"); 
    var birthday = get("birthday"); 

} catch (e) { 

    error = e; 

} 

if (!error) { 

    console.log("No errors? Everything all right?"); 

} 

출력

No errors? Everything all right? 
Hey, I set the variable! 
+0

나는 우리에게 보여주지 않는 코드가 있다고 생각합니다. – Pointy

+0

첫 번째 코드 블록은 어디에 있습니까? "몇 초 후"란 의미는 ... 코드가 어떻게 실행됩니까? "데이터베이스에 연결"이라는 말의 의미는 무엇입니까? 이 코드의 실행 컨텍스트는 무엇입니까? 브라우저 또는 Node.js와 같은 서버 측 시스템에 있습니까? "get()"함수 **의 코드는 실제로 ** 어떤 모습입니까? – Pointy

+0

문제는 내가 (그리고 다른 여러 사람들이) 문제가 무엇인지 의심하고 있지만 "get()"하는 실제 코드를 보지 않고서는 무슨 일이 일어나고 있는지 정확히 말하기가 어려울 것입니다. – Pointy

답변

1

당신은 동시에 생각하고 있습니다. 두 개의 get 문이 호출되지만 db 문은 아직 콜백을 호출하지 않았습니다. catch 블록이 입력되지 않았으므로 정의되지 않은 error을 확인하면서 프로그램이 즐겁게 계속됩니다. 결과적으로 "No errors ..."가 인쇄됩니다. 그런 다음 db은 종료하기 전에 get 호출 중 하나에 비동기 적으로 응답합니다. 여기서 핵심은 print 문이 username 콜백의 결과라고 가정 할 수 없다는 것입니다. birthday 일 수 있습니다.

0

나는 그것이이 기능은 작동하지 않을 수 db.get()에 통과 확실한 내기 어떤 데이터베이스입니다 코드를 알고하지 않습니다하지만 코드가 원하는 것처럼 보입니다. 이 함수는 데이터베이스 결과가 "준비 상태"또는 무언가가 될 때까지 호출되지 않는 콜백입니다. 에는 자신의 방식대로 작동하는 "get()"루틴을 사용할 수 없습니다. 즉, db.get() 호출을 "대기"할 수 없기 때문입니다.

"get()"함수를 다시 작성하여 고유 한 함수 매개 변수를 가져올 수 있습니다.