1. ホーム
  2. javascript

[解決済み] Angular.jsでプロミスが実行されたときに常に何らかのコードを実行する方法

2023-07-08 13:26:24

質問

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();
})

この問題はよくあることだと思うので、できるのではないかと思ったのですが、ドキュメントには何も書かれていません。何か思い当たることはありませんか?

どのように解決するのですか?

この機能は このプルリクエスト に実装され、現在ではAngularJSの一部となっています。当初は "always" と呼ばれていましたが、その後名前が変更され finally という名前に変更されたので、以下のようなコードになります。

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

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

$http.get('/foo')['finally'](doSomething);