바디클랜져
467
2018-12-27 10:43:33
3
451

javascript callback 함수에 인자 전달하는 효율적인 방법 없을까요?


function cb(data, id){

  console.log(id + ':' + data)

}


function requestMessage(message, callback){

  $.ajax({...

       success: function(data){ callback(data, id) }

  })

}


requestMessage('aaa', cb)

위와 같은 형태의 코드를 작성중인데 requestMessage를 호출할때 callback함수에 들어간 parameter를 효과적으로 설정할수 있는 방법 없을까요..

그냥 생각나는건

requestMessage('aaa', cb, id)

이런 방법 밖에는 생각이 안나네요... ㅜㅜ

0
0
  • 답변 3

  • siva6
    4k
    2018-12-27 11:06:10

    callback 안에 id가 있어도 될 것 같은데요.

    0
  • daewon
    424
    2018-12-27 11:38:08 작성 2018-12-27 11:50:07 수정됨

    위와 같은 방법을 해결하기 위해서 currying이라는 기법을 사용합니다.

    요약하면 함수의 일부 인자를 고정시켜서 새로운 함수를 만드는 방법입니다.

    https://edykim.com/ko/post/writing-a-curling-currying-function-in-javascript/


    makeCbWithId 함수를 확인해 보세요.

    아래 예에서는 위 코드에 맞춰서 작업했지만 언더스코어 등 라이브러리에는 보다 일반화된 구현이 존재합니다.


    코드

    function ajax(param) {
      setTimeout(function() {
        param.onSuccess("return data")
      }, 1000);
    }
    
    function requestMessage(message, callback) {
      ajax({
        onSuccess: function(data){
          callback(data);
        }
      });
    }
    
    function makeCbWithId(id, callback) {
      return function(data) {
        callback(data, id);
      };
    }
    
    var cb = makeCbWithId("your_id", function(data, id) {
      console.log(id + ':' + data);
    });
    
    requestMessage('abc', cb);
    


    출력

    your_id:return data


    2
  • 바디클랜져
    467
    2018-12-27 15:45:23

    흙 ㅜㅜ

    감사합니다. currying 듣기만 했는데. 이럴때 사용하는거구나 싶네요 

    설명이 너무 친철하셔요 !

    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.