2015-10-28 2 views
1

Я пытаюсь написать функцию, которая открывает окно с угловым ui и возвращает обещание после его закрытия. Обычно это легко, вы возвращаете модальный экземпляр, но в этом сценарии, даже если окно закрыто, я хочу проверить ответ внутри функции .then() и, возможно, отклонить обещание на основе кода состояния, хотя это был успешным.

Это, вероятно, не имеет особого смысла, так вот какой-то код ...

// Function which should return a promise 
var myFunc = function(){ 

    var modalInstance = $modal.open({ 
     templateUrl: 'xxx', 
     controller: 'yyy', 
    }); 

    return modalInstance.result.then(function (result) { 

     // If the login was successful then resolve 
     if(result && result.success === true){ 

      // What goes here? 

     } 

     // If it was uncuccessful then reject, even though it was closed successfully. 
     else{ 

      // What goes here? 

     } 


    }, function() { 
     $log.info('Modal was closed unsuccessfully'); 
    }); 


} 


myFunc.then(function(){ 
    // DO something 
}); 

ответ

2

Вы можете вернуть новое обещание, что будет только разрешится, если обещание от $ modalInstance.result получает решены и статус проверка кода хорошая. Что-то вдоль линий:

var myFunc = function(){ 

    var modalInstance = $modal.open({ 
     templateUrl: 'xxx', 
     controller: 'yyy', 
    }); 

    var deferred = $q.defer(); 
    modalInstance.result.then(function() { 
     if (/* status code checks ok */) { 
      deferred.resolve(); 
     } 
     else { 
      deferred.reject(); 
     } 
    }, function() { 
     deferred.reject(); 
    }); 

    return deferred.promise; 
} 

См docs on $q.

+0

Спасибо, что сработало отлично. Я знал, что это будет что-то простое, бит, который я не разработал, был тот факт, что вы не могли просто вернуть отложенное. Решить() вы должны вернуть отложенное.произведение – jonhobbs

+0

Я не понимаю, почему это сработает. Когда я пытаюсь использовать тот же код, я получаю «ReferenceError: $ modalInstance не определен» –

+0

@ToddGrigsby Исправлено опечатка, $ modalInstance должно быть modalInstance. –

Смежные вопросы