2013-06-02 2 views
0

저는 초보자이며 기능 및 기타 문제를 해결하기 위해 머리를 감싸는 데 여전히 어려움을 겪고 있습니다. 콜백 내에서 특정 값을 설정 한 다음 해당 함수가 실행을 완료하면 반환해야합니다. 그러나이 함수는 return 문에 도달하기 전에는 실행되지 않습니다. 다음은 간단한 예입니다.비동기 콜백이 완료되면 올바른 값을 반환하십시오.

function otherfunction(somefunction) {} 

function foo() { 
    var bar = 'random value'; 

    otherfunction(function() { 
    bar = 'correct value'; 
    }); 
    return bar; 
} 

console.log(foo()); 

여기는 jsfiddle입니다.

+1

'기타 기능'에서는 '일부 기능'을 호출하지 않습니다. – atomman

+2

관련 항목 : http://stackoverflow.com/q/14220321/ –

답변

4

TL; DR; 당신은 할 수 없습니다. 함수 서명이 함수를 받아


, 함수가 비동기이며,이 완료 일단 콜백으로 그 함수를 호출하는 비명 그것. 이 상황에서

, otherfunction 비동기 함수가 될 것이며,이 somefunction otherfunction 일단이 실행을 완료 한 콜백으로 실행된다.

이제 동기 함수 (foo)에서 비동기 함수 (otherfunction)의 결과를 반환 할 수 없습니다. 대신 otherfunctionfoo에 호출 한 후 콜백 (demo)에서 실행하면 코드 실행이 지연됩니다.

function foo() { 
    otherfunction(function() { 
    var bar = 'correct value'; 

    console.log(bar); 
    }); 
} 

이제 otherfunction의 결과에 대해 다른 작업을 수행하고 싶습니다. 항상 console.log 그것은 아닙니다; foo으로 수정하여이 문제를 해결할 수도 있습니다. 콜백을 수락합니다.

function foo(callback) { 
    otherfunction(function() { 
    var bar = 'correct value'; 

    callback(bar); 
    }); 
} 

다음은 (demo)와 같습니다.

foo(function (newBar) { 
    console.log(newBar); 
}); 

foo(function (newBar) { 
    // do whatever with newBar 
}); 
+0

콜백이 어떻게 작동하는지 더 잘 이해합니다. 하지만 이제는 'foo'가 반환하는 데이터를 반환해야하는 다른 콜백에서 'foo'를 호출해야합니다. 까다 롭지 만, 당신이 나에게 주신 정보로 알아낼 수있을 것 같습니다. 감사! – AaronAAA

관련 문제