2017-09-22 2 views
-1
//Links to jsfiddle must be accompained by code 
var customApi = { 
     feeds: { 
      getFeedActivities(feedName, feedId, callback) { 
       function good(data) { 
        return callback(data); 
       } 

       function bad(result) { 
        return callback(null); 
       } 
       var url = `${origin}/api/feeds/${feedName}/${feedId}`; 
       callApi(url, null, _GET, good, bad); 
      }, 
      getUserFeedActivities(userId, callback) { 
       return getFeed('User', userId, callback); 
      }, 
      followFeed(feedName, feedId, callback) { 
       function good(data) { 
        return callback(data); 
       } 

       function bad(result) { 
        return callback(null); 
       } 
       var url = `${origin}/api/feeds/${feedName}/${feedId}`; 
       callApi(url, null, _GET, good, bad); 
      } 
     }, 

     media: { 
      uploadTemp: function(model, callback) { 
       function good(data) { 
        return callback(data); 
       } 

       function bad(result) { 
        return callback(null); 
       } 
       var url = origin + "/api/media?type=photo"; 
       callApi(url, model, _POST, good, bad); 
      }, 
     }, 
     // 

좀 더 일반적인 콜백으로 처리 할 수있는 사용자 지정 콜백 함수가 있습니다. 성공적인 또는 실패한 API 호출을 처리하는 제네릭 함수를 만드는 방법을 알고 있지만 사용자 지정 콜백을 사용하여이를 수행 할 수있는 방법이 있습니까?중복 js 코드를 줄이는 방법에 대한 조언

+0

가 (또는 이외에) jsFiddle는, ** 스택 조각 ** (은'[<>] '도구 모음 버튼)을 이용하시기 바랍니다 그래서 귀하의 질문에 대한 ** 전체 ** 내용이 현장에 있으며 사람들은 귀하의 질문에 대한 전체 컨텍스트를보기 위해 오프 사이트에 갈 필요가 없습니다. –

+0

사례 :'callApi'는 어떻게 생겼습니까? –

+2

@ T.J.Crowder 바이올린에 더 이상 컨텍스트가 없습니다. – Barmar

답변

2

나는 자신에게 콜백을 처리하는 callApi (또는 버전)의 래퍼를 제공 할 것입니다.

function callApi2(url, model, method, callback) { 
    return callApi(
     url, 
     model, 
     method, 
     function(result) { 
      return callback(result); 
     }, 
     function() { 
      return callback(null); 
     } 
    ); 
} 

다음 followFeed이된다 : 여기에 래퍼 대신

followFeed(feedName, feedId, callback) { 
    var url = `${origin}/api/feeds/${feedName}/${feedId}`; 
    callApi2(url, null, _GET, callback); 
} 
+0

'callApi '에 직접'callback'을주는 대신'callback (result)'을 함수 내에 두는 이유는 무엇입니까? –

+1

@ NathanP .: 방어 적입니다. ** callApi에 직접'callback '을 제공하는 것이 가능할 수도 있지만, 우리는 확신하기 위해 더 많이 알아야 할 것이다. 위와 같이,'callback'은 기본값'this'와 정확히 하나의 인수 (OP의 코드가하는 것)로 확실히 호출됩니다. 우리가'callApi'에 정확하게 전달했다면,'callApi'도 마찬가지인지,'콜백'이 추가 인수에주의를 기울이지 않는다는 것을 알아야합니다.'' 이거야. (당신은 아마 고전적인 에러를 보았을 것입니다 :'[ "1, 2, 3] map (parseInt)':-)) –

+0

*"우리가'callApi' * typo는 * "우리가 ** callApi'에 직접적으로 **"** –

관련 문제