2013-06-19 8 views
10

Angular.jsで提供されているpromise APIを使用して$ http呼び出しの結果に関係なく、関数を実行するにはどうすればよいですか?

$http({ 
    method: 'POST', 
    url: submitUrl, 
    data: $scope.data 
}) 
.success(function(data) { 
     // execute this code on success 
}) 
.error(function(data) { 
     // execute this code on error 
}) 
.complete(function() { 
    // execute this code regardless of outcome 
}); 

リクエストが完了すると、これを使用してAJAXスピナーアイコンを非表示にすることができます。リクエスト結果にかかわらず、スピナーを非表示にしたい場合があります。

+0

この方法で何を達成したいですか? –

答えて

15

私はAngular.jsで世界最高の専門家ではないが、次のようにあなたができることを理解する:あなたは、基本的に$ Q約束のある一つ以上の.then()、から何かを工夫することを余儀なくされている

whatever.then(function() { 
    // success code here 
}, function() { 
    // error code here 
    return true; // return anything that's not undefined (and not a `throw()`) to force the chain down the success path at the following then(). 
}).then(function() { 
    // "complete" code here 
}); 

唯一の方法です。リクエストが成功したかどうかは気にしない場合は

+0

意味があります。 2番目の.then()は、最初のものが解決されたり拒否されたりすると実行されます。 – Failpunk

8

、あなたは... successerror

var cb = function(response){ 
     // do something 
    }; 


    $http.post(submitUrl, $scope.data).success(cb).error(cb); 

    // OR 

    $http.post(submitUrl, $scope.data).then(cb, cb); 

を同じコールバックを渡ししかしsuccesserrorコールバックが異なっていることを知ることができます署名はthenコールバックよりも優先されます。

はまた、約束をテンプレートにあなたがいるかのようにスコープに取り付けた約束を扱うことができることを意味し、角度でテンプレートエンジンによって認識されていますそれらは結果の値でした。

これは、あなたがこれを行うことができますことを意味します

コントローラー:

$scope.article = $http.get('/articles/' + articleId); 

テンプレート:

<article ng-cloak> 
    <h3>{{article.title}}</h3> 
    <div>{{article.content}}</div> 
</article> 

そして$http.get約束が解決されたとき、ビューが更新されます。

+1

私は約束とテンプレートエンジンを読み、面白いと思う。 – Failpunk

+0

ほぼ1年後に、テンプレートの約束(自動)アンラッピングが[バージョン1.2.0で削除されました](https://github.com/angular/angular.js/commit/fa6e411da26824a5bae55f37ce7dbb859653276d)簡単なメモです。 – bernhardw

12

それはあなたが何をしたいかに依存しますが、あなたはまた、あなたの約束の履行または拒否のいずれかを実行するためにfinally()を使用して、クリーンアップロジックのために、同様の:

promise.finally(function() { 
    // Do something regardless of outcome. 
}); 

すると、そのもののfinally()に注意してください。 $q(および他のいくつかのライブラリ)はofficial draftの一部ではありません。

+0

この作品は私のために、私は要求を制御するために使用されたajax仕上げとアイコンの読み込みを非表示にする – vandersondf

関連する問題