2015-08-23 3 views
0

Я использую некоторые функции, которые отправляют запрос async на $ http на сервер. Я хочу вызвать ту же текущую функцию после пользователя-релогина, если ответ «notlogin» , Я думаю, мне нужно использовать обещание, но как?функция вызова A в функции A после функции вызова успеха B в угловом js

$scope.A = function(){ 
    $http({..,async: "isAsync",...}) 
    .success(function (response) { 
     if (response.d == "notlogin") { 
      if ($scope.B())//call back login to refresh session 
       $scope.A();//repeat request if login return true 
     } 
    }); 
}; 

$scope.B= function() { 

     $scope.userlogin_error = "wait..."; 
     $http({...,async: "isAsync",...}).success(function (response) { 

      if (response.d == "True") { 
       $scope.userlogin_error = "login success"; 
       $scope.user_islogin = true; 

       return true; 
      } 
}); 
} 
+3

Что такое функция 'B'? – dfsq

+0

это функция входа ... –

ответ

0

Постарайся сделать $ scope.B(), как promise (Это что-то асинхронное, я правильно понимаю?);

$scope.B = function(){ 
    var defer = $q.defer(); 
    if(something) { 
     defer.resolve(data); 
    } else { 
     defer.reject(error); 
    } 
    return defer.promise; 
}; 

$scope.B().then(function(data){ 
    $scope.A(); 
}); 
+0

Это анти-шаблон, если 'scope.B' уже использует' $ http', и может просто вернуть это обещание. – charlietfl

+0

Я новичок в угловом ... вы можете сделать ответ понятным? Я редактировал вопрос. –

+0

Я тестировал это, но .then() не срабатывал .i использовал $ scope. $ Apply (function() { deffer.resolve (вещь); }); но не сработал –

0

Вы можете вернуть успеха дозвона $ scope.B(), просто вернув $ HTTP вызов

$scope.A = function(){ 
    $http({..,async: "isAsync",...}).success(function (response) { 
    if (response.d == "notlogin") { 
     $scope.B().success(function(data){ 
      if(data.d == "True"){ 
       $scope.userlogin_error = "login success"; 
       $scope.user_islogin = true; 
       $scope.A(); 
      } 
     }); 
    } 
    }); 
}; 

$scope.B= function() { 
    return $http({...,async: "isAsync",...}); 
}; 
+0

в моем коде i возвращает boolean вместо $ http и из-за асинхронного вызова условие для функции вызова A не работает. Кажется, нет никакой разницы между bool или $ http return. –