Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2015, 13:42
Аватар для FireVolkhov
Аспирант
Отправить личное сообщение для FireVolkhov Посмотреть профиль Найти все сообщения от FireVolkhov
 
Регистрация: 17.04.2013
Сообщений: 88

Promise как сделать синхронным?
Доброго времени суток, форумчане,
Как выйти из ситуации
$q.when()
  .then ->
    if allItems
     return allItems
    else
     return $http.get(...)
  .then ->
    Полезные действия...
, чтоб сохранить promise и синхронность его выполнения?
Проблема в том, что даже, если массив существует, вызов "Полезные действия..." происходит асинхронно, что в свою очередь вызывает моргание содержимого в виджете.
Может кто знает как выполнить promise синхронно?
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2015, 14:05
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от FireVolkhov
Promise как сделать синхронным?
никак

Сообщение от FireVolkhov
вызов "Полезные действия..." происходит асинхронно, что в свою очередь вызывает моргание содержимого в виджете.
ставь спиннер
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 07.04.2015, 15:34
Аватар для FireVolkhov
Аспирант
Отправить личное сообщение для FireVolkhov Посмотреть профиль Найти все сообщения от FireVolkhov
 
Регистрация: 17.04.2013
Сообщений: 88

Костыль по быстрому накидал
angular.module 'KeepTeam.Common'
	.service 'SynchroQ', ($rootScope) ->
		_evalAsync: null

		isSynchroOn: false
		synchronousOn: ->
			unless @isSynchroOn
				@isSynchroOn = true
				@_evalAsync = $rootScope.$evalAsync

				$rootScope.$evalAsync = (callback) ->
					callback?()

		synchronousOff: ->
			if @isSynchroOn
				@isSynchroOn = false

				if @_evalAsync
					$rootScope.$evalAsync = @_evalAsync
					@_evalAsync = null

и в коде
promise = $q.when()
 if allItems
  SynchroQ.synchronousOn()
  promise.$$state.status = 1
 promise.then ->
    if allItems
     return allItems
    else
     return $http.get(...)
  .then ->
    SynchroQ.synchronousOff()
    Полезные действия...

Это выглядит очень костыльно и по хорошему, чтоб решить задачу придется сделать модифицированный сервис $q
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2015, 16:36
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

О, мои глаза Что ты делаешь? Обещания созданы быть асинхронными.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать калькулятор и с чего начать? A.P. Yellowman Общие вопросы Javascript 3 15.11.2013 21:32
Как сделать реакцию на изменение любого элемента формы. Mik Events/DOM/Window 3 28.07.2011 08:52
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Вопрос как сделать эту панельку Определённых размеров и свойств. jei jQuery 3 09.06.2009 19:14