James Allen 10 лет назад
Родитель
Сommit
03a3e1ceb3
1 измененных файлов с 49 добавлено и 0 удалено
  1. 49 0
      services/web/public/coffee/services/queued-http.coffee

+ 49 - 0
services/web/public/coffee/services/queued-http.coffee

@@ -0,0 +1,49 @@
+define [
+	"base"
+], (App) ->
+	App.factory "queuedHttp", ($http, $q) ->
+		pendingRequests = []
+		inflight = false
+
+		processPendingRequests = () ->
+			return if inflight
+			doRequest = pendingRequests.shift()
+			if doRequest?
+				inflight = true
+				doRequest()
+					.success () ->
+						inflight = false
+						processPendingRequests()
+					.error () ->
+						inflight = false
+						processPendingRequests()
+
+		queuedHttp = (args...) ->
+			deferred = $q.defer()
+			promise = deferred.promise
+
+			# Adhere to the $http promise conventions
+			promise.success = (callback) ->
+				promise.then(callback)
+				return promise
+
+			promise.error = (callback) ->
+				promise.catch(callback)
+				return promise
+
+			doRequest = () ->
+				$http(args...)
+					.success (successArgs...) ->
+						deferred.resolve(successArgs...)
+					.error (errorArgs...) ->
+						deferred.reject(errorArgs...)
+
+			pendingRequests.push doRequest
+			processPendingRequests()
+
+			return promise
+
+		queuedHttp.post = (url, data) ->
+			queuedHttp({method: "POST", url: url, data: data})
+
+		return queuedHttp