0

ログインコントローラーに挿入する認証サービスをセットアップし、それを呼び出してログインを行います...たとえば

$scope.login = 関数() {

    var loginResult = authentication.login($scope.model.user, $scope.model.pass);

結果に応じて何らかのロジックを実行する必要があるため、ログインが成功したかどうかを知る必要があります。認証サービスのログインからブール値を返すことができましたが、問題は、ログイン内で約束のある残りのサービスを呼び出すことです。そのようです

       return {
         authenticate: function (username, password) {

            var enc = base64.encode(username + ':' + password);

            AuthRestangular.setDefaultHeaders({'Authorization': 'Basic ' + enc });


            AuthRestangular.one('login').get().then(function (data) {
                isLoggedIn = true;
                return true;
            }, function () {
                return false;
            });

そのため、Rest サービスが戻るのに数秒かかり、promise を返します。つまり、true または false のいずれかです。そのため、サービスは、約束をする前に実際にログイン コントローラーに戻ります。

だから私はここで何をすべきか混乱しています.私のサービスにもプロミスを返させることはできますか?? それ以外の場合、 loginResult は時間内に返されないため常に false であるため、私の bool のデフォルトは false です。

何か案は

ありがとう

4

1 に答える 1

2

サービスから true false を返すのではなく、サービスから promise を返し、その promise をコントローラー内で使用する必要があります。

--service 
return {
         authenticate: function (username, password) {

            var enc = base64.encode(username + ':' + password);

            AuthRestangular.setDefaultHeaders({'Authorization': 'Basic ' + enc });


           return  AuthRestangular.one('login').get();
            });


--controller 

authentication.login($scope.model.user, $scope.model.pass).then(function(data){})
于 2013-07-12T15:56:32.670 に答える