2016-03-18 4 views
0

Я использую угловое приложение в своем приложении rails. Ниже приведен фрагмент кода, который делает запрос api и код в .run. Бывают случаи, когда ответ api все еще выполняется, и код выполняется. Это приводит к тому, что директивы не загружаются должным образом, как ожидалось. для ex-tg-if зависит от некоторых данных для вещей, которые нужно загрузить, но поскольку данные недоступны. Он пропускает отображение сообщений.Подождите, пока пользовательский запрос на угловой js не получит ответ

}).factory('ApiDataCall', function ($resource) { 
    return $resource('api_data/check_errors'); 

}).run(function ($rootScope, $timeout, $navigationWarning,$window, ApiDataCall) { 

    ApiDataCall.get(function (data) { 
    $rootScope.require_redirect = data; 
    }); 

Я хотел бы знать, как я могу поставить задержку, чтобы подтвердить, что запрос завершен. Я обнаружил, что $ q.defer() вместе с обещанием может решить эту проблему, но не мог понять этот подход. Сообщите мне, нужны ли какие-либо другие материалы с моей стороны.

ответ

2

ApiDataCall должен вернуть Угловое обещание. Затем вы можете сделать что-то вроде:

ApiDataCall.get(function (data) { 
    $rootScope.require_redirect = data; 
    }).then(function success(response) { 
     //Do something here that requires ApiDataCall.get() to complete 
    }, function failure(response) { 
     //Do something here if the call fails. 
    } 
); 

Простым способом реализации обещаний является использование $ q. например , имеющий ApiDataCall.get возврат:

return $q.when({foo: "bar"}); 

для успеха. а также:

return $q.reject(); 

для отказа

позволяет для объекта ответа, переданного соответствующих функций в то(), чтобы быть {Foo: "бар"}