2017-09-22 6 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

なぜ 'callback'を' callApi'に直接渡すのではなく、 'callback(result)'を関数内にラップするのですか? –

+1

@ NathanP .:守備的です。 ** callApiに直接 'callback 'を提供することは可能かもしれませんが、もっと知っておく必要があります。上記のように、 'callback'は、デフォルトの' this'とちょうど1つの引数(これはOPのコードと同じです)で確実に呼び出されます。 'callApi'に正しく渡した場合、' callApi'もそうであるか、 'callback'は受け取った追加の引数には何の注意も払わないことを知る必要があります。' 'これはです。 (あなたはおそらく、古典的なエラーを見たでしょう: '' "、" 2 "、" 3 ")map(parseInt)' :-)) –

+0

* "それを正しく' callApi' "*に渡した場合、 * "私たちが** callApi'に直接渡したら* –

関連する問題