콜백함수 2개에서 값을 받은 후에 함수를 호출하려면 어떻게 해야할까요?
조회수 1701회
// ...
var foo, bar
foobar.first(function (value) {
foo = value
})
foobar.second(function (value) {
bar = value
})
function next() {
// ...
}
// ...
이런형식으로 되어있는 코드입니다
전역변수에 2개의 콜백함수로 받은 값이 들어온 다음에 next() 함수를 호출하고 싶은데 어떻게 해야할까요?
2 답변
-
가장 단순하게 해결하는 방식은 각 변수가 초기화 되었는지를 체크하는 것 입니다. 싱글 쓰레드로 실행되기 때문에 레이스 컨디션 등 동기화 문제가 발생하지 않습니다.
var foo, bar foobar.first(function (value) { foo = value if (foo && bar) { next(); } }) foobar.second(function (value) { bar = value if (foo && bar) { next(); } }) function next() { // ... }
물론 실무에서 위 코드처럼 사용하는 경우는 많이 없고, async.js과 같은 모듈을 사용하시면 비동기 문제를 비교적 쉽게 해결 가능합니다.
장기적으로는 발전된 방식인 promise 사용을 권장합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
정대원
님의 의견대로 Promise를 사용해보시는 것이 좋을 것 같습니다. jQuery의Deferred
와Promise
로 간단히 바꿔보면 다음과 같이 변경할 수 있을 것 같네요. 참고하시기 바랍니다.var fooDeferred = $.Deferred(); var barDeferred = $.Deferred(); foobar.first(function (value) { fooDeferred.resolve(value); }) foobar.second(function (value) { barDeferred.resolve(value); }) $.when(fooDeferred.promise(), barDeferred.promise()).done(function(foo,bar) { // foo,bar 값이 모두 전달 된 경우, ... });
댓글 입력