2016-08-12 3 views
0

後、I'ldはREST-サービスの各機能については、このイオン性;イオンでのRESTサービスと通信.then

function ListCategories_Request(){ 
    rqst=_BuildRequest("ListCategories"); 
    rqst.Data={extraParam1:1, 
       extraParam2:2 
      } 
    return $http({...ValidParameters including the rqst...}).then(GetResult,Request_onError) 
} 

と同様の機能を持っているとjavascriptのリターンは、私は同様のJavaScript関数を構築します。

送信されたリクエストが一意なので、受信結果も一意に処理する必要があります。結果のRESTサービスベースの分析が.thenチェーンに追加されますが、親クラスを更新すると、UIは親クラスで実行する必要があります。

だから、私は、httpリクエストの結果を分析する前に、UpdateCategoriesは()、と呼ばれていることを、

ListCategories_Request().then(function(res){ UpdateCategories()}); 
ListFrames_Request().then(function(res){ UpdateFrames()}); 

現在の問題があるように呼び出しを行うしたいと思います。

GetResult内の特定の関数が呼び出される前に、戻り値$ http(...)、次に(GetResult、OnError)が返されないようにするにはどうすればよいですか?

のgetResultのコード:

function GetResult(res){ 
     if(res.status==200) 
     { 
      if((res.data!=={}) && (res.data.Data!=={})) 
      { 
        return AnalyzeResult(res.data); 
      } 
     } 
    }; 

AnalyzeResultは似ているものの:だから

 function AnalyzeResult(Result) 
    { 
      Func=Result.Func; 
      switch(Func.toUpperCase()) 
      { 
       case "LISTCATEGORIES": 
        erg = ListCategories_Result(Result); 
        break; 
       case "LISTFRAMES": 
        erg= ListFrames_Result(Result); 
        break; 
       default: 
        erg = {}; 
        console.log("UnKnown Result!"); 
      } 
      FinalizeRequest(Index); 
     } 
     return erg; 
    } 

、私は本当に私のミスであり、得ることはありません。 ListCategories_RequestまたはListFrames_Requestがあまりに早く返されないようにするにはどうすればよいですか?

は、あなたが(あなたがイオンを経由して、とにかく角度を使用している与えられた)$ qを使用したほうが良いですありがとうとよろしく

フランク

+2

ListCategoriesは_です????非同期機能ですか?彼らは* thenable *を返しますか? FinalizeRequestは非同期ですか?あなたはそれが完了するのを待つ必要がありますか? 'erg'はグローバルだと気づいていますか? –

+0

IRTA "Ironic" ... –

+0

私はあなたに約束が必要だと思う。 – Ladmerc

答えて

0

。あなたがしたいことを約束することができます。ここで私はアイデアを証明するために一緒に入れていることの例です:

var app = angular.module("TestApp",[]); 
app.controller("TestController", function($scope, $http, $q){ 
    $scope.message = "Deferred Example"; 
    var deferred = $q.defer(); 

    function getAllPosts(extractor) { 
    $http.get("https://jsonplaceholder.typicode.com/posts") 
     .then(function(data){ 
      console.log("Data is: ", data); 
      $scope.postIds = extractor(data.data); 
      deferred.resolve($scope.postIds); 
     }); 

    return deferred.promise; 
    } 

    function extractPostIds(data) { 
    console.log("Exracting the data: ", data); 
    return data.map(function(post){ 
     return post.id; 
    }) 
    } 

    function squarePostIds(postIds) { 
    console.log("Squaring post ids: ", postIds); 
    $scope.squaredPostIds = postIds.map(function(id){ return id*id;}); 
    } 

    getAllPosts(extractPostIds) 
    .then(function(postIds){ 
     squarePostIds(postIds); 
    }); 
}); 

そして、ここではJSBinはこのためです:https://jsbin.com/fugeyad/3/edit?html,js,output

更新:約束について読むためにいくつかのリンクを追加。

http://andyshora.com/promises-angularjs-explained-as-cartoon.html http://www.html5rocks.com/en/tutorials/es6/promises/

関連する問題