2015-08-01 3 views
0

$ http service in angular istonton, и мой предыдущий опыт с запросом xhr/ajax показал, что он столкнулся, когда два запроса имеют один и тот же объект xhr. Разве это не проблема с угловым? если да, то как угловой справляется с такой ситуацией?

+0

опубликовать код, который может помочь – ngLover

ответ

0

Я думаю, что вы «Непонимание того факта, что услуга $http является одноточечным, чтобы означать, что все запросы каким-то образом будут иметь один и тот же объект XHR. Они этого не делают.

Служба $http сама по себе является одноэлементной, но это не означает, что запросы имеют один и тот же объект XHR.

В любое время вы вызываете метод $http службы (например, $http#get) инициализирует новый асинхронный запрос ... Тем не менее, это не инициализировать новый объект $http.

Взгляните на некоторых из Addy Osmani's примеров коды для одноплодной схемы:

return { 
    getInstance: function() { 

     if (!instance) { 
     instance = init(); 
     } 

     return instance; 
    } 
    }; 

Паттерн синглтона просто гарантирует, что новый экземпляр $http службы сам не получает инициализирован снова и снова .. . Но это не означает, что есть только один XHR объект.

псевдо-код $http службы будет выглядеть примерно так:

var $httpProvider = (function() { 
    var somePrivateConfig = "something important"; 

    var service = { 
    request: function() { 
     // make an HTTP request with an XHR object 
    } 
    }; 

    return { 
    init: function() { 
     // this is the important part that makes sure its a singleton 
     window.$http = window.$http || service; 
    } 
    }; 

})(); 

/** 
* Something like this would be called whenever you 
* inject the $http service as a dependency... 
* However, since it could be passed into multiple things all in the same runtime, 
* like controllers, directives, etc., we only need to initialize it ONE time 
*/ 
$httpProvider.init(); 

/** 
* Now let's pretend we're inside, say, a controller. 
* 
* This method can safely be called many times, 
* but the method is always being called from the same singleton object 
*/ 
$http.request(); 

Кроме того, вы заметите, что есть локальная переменная somePrivateConfig в $httpProvider IIFE. Если бы мы повторно инициализировали новый $http каждый раз, когда он был добавлен к компоненту (будь то контроллер, директива или что-то еще), будет создана новая приватная переменная, но мы всегда хотим ссылаться на это же значение на протяжении всего жизненного цикла объекта $http, чтобы мы могли гарантировать, что все эти компоненты всегда ссылаются на одну и ту же информацию.

Но это не имеет никакого отношения к самому объекту XHR. Возможно, я неправильно использовал некоторые из приведенных выше терминов и исказил, где и как сами поставщики в контексте AngularJS инициализируются в одноэлементные объекты, но принцип одноэлементного шаблона по-прежнему заключается в том, что он просто означает оболочку асинхронного запроса «класс» (которая является услугой $http) является одноточечным, но XHR нет.

0

$ http-запросы являются асинхронными и возвращают обещание с методами success() и error(). Ниже дополнительной информации (д сервис $, что реализация обещаний Angularjs):

«Служба, которая позволяет запускать функции асинхронно, и использовать их возвращаемые значения (или исключения), когда они сделали обработки»

Читайте здесь: