83

私の Angular.js アプリケーションでは、いくつかの非同期操作を実行しています。開始する前にアプリケーションをモーダル div でカバーし、操作が完了したら、操作が成功したかどうかにかかわらず、div を削除する必要があります。

現在、私はこれを持っています:

LoadingOverlay.start(); 
Auth.initialize().then(function() {
    LoadingOverlay.stop();
}, function() {
    LoadingOverlay.stop(); // Code needs to be duplicated here
})

それはうまく機能しますが、次の疑似コードのようなよりクリーンなものを使用したいと思います。

LoadingOverlay.start(); 
Auth.initialize().finally(function() { // *pseudo-code* - some function that is always executed on both failure and success.
    LoadingOverlay.stop();
})

これはかなり一般的な問題だと思うので、できると思っていましたが、ドキュメントには何も見つかりません。それができるかどうか、何か考えはありますか?

4

4 に答える 4

164

この機能はこのプル リクエストに実装されており、AngularJS の一部になりました。最初は「always」と呼ばれ、その後名前が に変更されたfinallyため、コードは次のようになります。

LoadingOverlay.start(); 
Auth.initialize().then(function() {
    // Success handler
}, function() {
    // Error handler
}).finally(function() {
    // Always execute this on both error and success
});

sincefinallyは予約済みのキーワードであるため、特定のブラウザー (IE や Android ブラウザーなど) で壊れないように、文字列にする必要がある場合があることに注意してください。

$http.get('/foo')['finally'](doSomething);
于 2013-05-23T14:23:10.133 に答える