巨大なコントローラの中で、私はデータベースのデータに頼っています。このデータは、状態定義内でresolve
を使用して取得されます。 しかし、まれで特殊なケースでは、メインデータベースのデータがなく、別のデータベースのデフォルトデータを使用する必要があります(ロードに時間がかかります)。もちろん、決してデフォルトデータをロードする必要はありませんが、まれにしか必要ではありません。したがって、状態定義にresolve
を使用してデフォルトデータをロードすることもオプションではないと私は思います。特別な場合にのみ非同期にデータを取り込む変数
したがって、resolve
によってフェッチされた「通常の」データが正常に読み込まれなかった場合にのみ、デフォルトのデータを取得する単純なif-else-statementを使用する必要があります。デフォルトのデータは、コールバック付きのサービス関数で取得されます。私の現在のコードは、このような次のようになります。もちろん
if (dataLoadedViaResolve.success){
$scope.myMainVariable = dataLoadedViaResolve;
} else {
myService.getDefaults(function(data){
$scope.myMainVariable = data;
});
}
// Do a lot of things with $scope.myMainVariable in hundreds of lines of code
私は非同期動作とトラブルに実行しているので、これは、動作しません。私はここで約束を使用することを勧められましたが、結局のところ、else
ステートメント内で実行されるコードを入れるための別の種類のコールバック関数を私に提供することになりました。しかし、それはコントローラー全体をリファクタリングすることを意味するでしょう(それは私をいくらか困らせるでしょう)。
else
文の内側に取り込まれている$scope.myMainVariable
までスクリプト待ちの実行を作るためにエレガントな方法ですし、その後、その後else
文の外$scope.myMainVariable
を使うのか?あなたは$q.when()
でdataLoadedViaResolve
をラップすることができ
あなたは、コントローラにあなたの全体の機能の多くのコードスニペットを提供することができますか? if-else条件だけではありません。 –