2012-11-18 5 views
1

다음은 내가하려는 일입니다.콜백 후 코드 모범 사례

나는 현재 Node.js를 사용하고 그것은 당신이 할 수있는 것들 중 하나입니다 : 이제

socket.on("sometopic", function() { 
    // this is a callback 
} 

의 내가 기능을 처리 대응으로 10 개 가지 주제, 이들 각각이 있다고 가정하자 그 I

windows.callbacks["topic_a"] = function() { 
    // code for cb a 
} 

windows.callbacks["topic_b"] = function() { 
    // code for cb b 
} 

windows.callbacks["topic_z"] = function() { 
    // code for cb z 
} 

을 내가 모든 콜백의 끝에서 실행하고 싶은 코드의 조각이있다 : 같은 내 "창"을 유지. 쉬운 방법은이 코드를 사용하여 함수를 만들고 각 콜백의 끝에 호출을 추가하는 것입니다. 그러나 이것은 우아한 것이 아닙니다.

누구나 더 좋은 해결책을 제안 할 수 있습니까? 내가 모르는 모범 사례가 있습니까? 나는 이런 종류의 함수형 프로그래밍에 아주 초록색이다.

+1

을 실행하기 위해 jQuery를 이연 객체를 사용하고, 방법을 추가 고려 우아한"? 때로는 직접 접근 방식이 실제로 가장 가독성이 있습니다. –

+0

궁극적으로 나는 많은 반복을 할 것이고 어쨌든 나는 이것을위한 더 좋은 메커니즘이 있어야한다는 느낌을 갖게된다. "헤이, 여기에 콜백이 있는데, 그걸로 끝나면이 다른 기능을 실행하십시오."와 같은 것입니다. –

답변

4
// THIS IS AN IDEA 

// helper 

function teardownWith(fn){ 
    return function (cb){ 
    return function(){ 
     return (cb(), fn()); 
    }; 
    }; 
} 

// prepare a modified function 

var endWithDate = teardownWith(function(){ 
    log(Date()); 
}); 

// pass our callback into the modified function 
// endWithDate() returns the final callback. 

window.callbacks["cb_a"] = endWithDate(function(){ 
    // code for cb_a 
}); 
+0

내가 결국 필요한 것을하는 재미있는 솔루션. 감사! –

1

되는 것을 지금까지 왜 "가 될 것입니다 각 콜백의 끝에서 또 다른 함수를 호출 말합니까 '항상'

jQuery Deferred Object Documentation

+0

이것은 흥미로운 jQuery 기능입니다 만, 비 jQuery 코드와 연결하기에는 너무 많은 글루 코드가 필요 하겠지만 ... 여전히 솔루션이라고 할 수 있습니다. –