2016-03-24 16 views
1

私は3つのサービスを持っています。返金遅延。プロミス2サービス

  1. HttpSender - それは、$ HTTPリクエスト

    app.service("HttpSender", ["$http", "$q", function ($http, $q) { 
    
        this.send = function (path, method, params) { 
         var deferred = $q.defer(); 
         $http({ 
          url: path, 
          method: method, 
          params: params 
         }).then(function successCallback(response) { 
          deferred.resolve(response.data); 
         }, function errorCallback(response) { 
          deferred.reject(response); 
         }); 
         return deferred.promise; 
        }; 
    
        this.sendRequestWithFile = function (path, method, params) { 
         //todo check if needed 
        }; 
    
    }]); 
    
  2. APIを制御 - エンドポイントのAPIリクエスト

    を活性化させる - すべてのAPI /アクセストークンが

    service("API", ["HttpSender", "$q", 'WindowOpen', function(HttpSender, $q, WindowOpen){ 
    
    var self = this; 
    var API = {}; 
    
        API.requestTypes = { 
         GetMethod: "GET", 
         PostMethod: "POST", 
         DeleteMethod: "DELETE", 
         PutMethod: "PUT" 
        }; 
    
         API.sendRequest = function (path, method, parameters, isCheckAccessToken) 
         { 
          path = ServersConfig.getApiServerUrl() + path; 
          parameters.access_token = getAccessToken(); 
          HttpSender.send(path, method, parameters); 
         }; 
    
    
         return API; 
    
        }]); 
    
  3. APIを処理制御

    app.factory('SelectedEndpoint', ['API', 
    
           function (API) { 
    
           var getPath = function (campaign) { 
            return "/campaigns/" + campaign.id + '/content/selected'; 
           }; 
    
           return { 
            get: function (campaign) { 
             API.sendRequest(getPath(campaign), API.requestTypes.GetMethod, {}, true).then(function (content) { 
    
    
             }); 
            } 
           }; 
    
    
          }]); 
    

deferred.promiseをエンドポイント関数に戻すと、答えが返ってくるはずです。次のプロセスは、私がapiファクトリにエンドポイントに返す場合にのみ機能します。

+0

これを使用する方法の例を追加できますか? –

+0

コントローラにまっすぐ戻したいです。私は質問のプロセスを最小限に抑えます。返されるデータを呼び出し側に戻すのではなく、以前の呼び出し元に戻したい場合 –

答えて

1

deferred.promiseをエンドポイント関数に戻すと、答えが返ってくるでしょうか?

各ステップで約束を適切に返すことによって。

HttpSenderサービス。

app.service("HttpSender", ["$http", "$q", function($http, $q) { 

    this.send = function(path, method, params) { 
    return $http({ 
     url: path, 
     method: method, 
     params: params 
    }).then(function successCallback(response) { 
     return response.data; 
    }); 
    }; 

}]); 

2.Apiサービスを:、ここに延期だけで直接約束を返す使用しないでください。 return HttpSender.send(path, method, parameters);と前回の約束を返すことを確認してください。

service("API", ["HttpSender", "$q", 'WindowOpen', function(HttpSender, $q, WindowOpen) { 

    var self = this; 
    var API = {}; 

    API.requestTypes = { 
    GetMethod: "GET", 
    PostMethod: "POST", 
    DeleteMethod: "DELETE", 
    PutMethod: "PUT" 
    }; 

    API.sendRequest = function(path, method, parameters, isCheckAccessToken) { 
    path = ServersConfig.getApiServerUrl() + path; 
    parameters.access_token = getAccessToken(); 
    return HttpSender.send(path, method, parameters); // note return promise 
    }; 

    return API; 

}]); 
+0

まだ結果をAPI.sendRequest(getPath(campaign)、API.requestTypes.GetMethod、{}、true)に返しません。次に(function(content){ }); –

+0

sendRequest関数でthenを使用するとエラーが表示されます –

+0

'API.sendRequest'から' return'を追加しましたか? – dfsq

関連する問題