Есть ли способ сделать синхронный вызов с AngularJS?
Документация AngularJS не очень подробна или обширна для выяснения некоторых основных вещей.
ПО ОБСЛУЖИВАНИЮ:
myService.getByID = function (id) {
var retval = null;
$http({
url: "/CO/api/products/" + id,
method: "GET"
}).success(function (data, status, headers, config) {
retval = data.Data;
});
return retval;
}
Ответы:
Не сейчас. Если вы посмотрите на исходный код (с этого момента времени, октябрь 2012 г.) , вы увидите, что вызов XHR open на самом деле жестко запрограммирован как асинхронный (третий параметр истинен):
Вам нужно будет написать свою собственную службу, выполняющую синхронные вызовы. Обычно это не то, что вы обычно хотите делать из-за характера выполнения JavaScript, вы в конечном итоге заблокируете все остальное.
... но ... если блокировка всего остального действительно желательна, возможно, вам стоит изучить обещания и службу $ q . Это позволяет вам дождаться выполнения набора асинхронных действий, а затем выполнить что-то, когда все они будут выполнены. Я не знаю, каков ваш вариант использования, но, возможно, стоит взглянуть на него.
Кроме того, если вы собираетесь развернуть свой собственный, дополнительную информацию о том, как выполнять синхронные и асинхронные вызовы ajax, можно найти здесь .
Я надеюсь, что это полезно.
источник
.then(callback)
, что - то вроде:doSomething(); $http.get('/a/thing').then(doEverythingElse);
.Я работал с фабрикой, интегрированной с автозаполнением карт Google и сделанными обещаниями, надеюсь, вы обслужите.
http://jsfiddle.net/the_pianist2/vL9nkfe3/1/
вам нужно только заменить autocompleteService этим запросом на $ http incuida, находящийся до завода.
и запрос $ http с
сам вопрос ставится на:
когда вы сделали хорошо и просьба:
когда возникает ошибка, а затем:
источник
источник
Недавно я столкнулся с ситуацией, когда я хотел выполнить вызовы $ http, вызванные перезагрузкой страницы. Решение, с которым я пошел:
источник
Вот способ сделать это асинхронно и управлять вещами, как обычно. Все по-прежнему поделено. Вы получаете ссылку на объект, который хотите обновить. Всякий раз, когда вы обновляете это в своем сервисе, он обновляется глобально, без необходимости смотреть или возвращать обещание. Это действительно хорошо, потому что вы можете обновить базовый объект изнутри службы без необходимости повторной привязки. Использование Angular так, как задумано. Я думаю, что делать $ http.get / post синхронным - плохая идея. Вы получите заметную задержку в скрипте.
И где-то в поле зрения:
источник
Поскольку синхронизация XHR устарела, лучше не полагаться на нее. Если вам нужно выполнить запрос POST для синхронизации, вы можете использовать следующие помощники внутри службы для имитации публикации формы.
Он работает путем создания формы со скрытыми входами, которая отправляется по указанному URL-адресу.
Внесите необходимые изменения в соответствии с вашими потребностями.
источник
Как насчет упаковки вашего вызова в
Promise.all()
метод, т.е.Promise.all([$http.get(url).then(function(result){....}, function(error){....}])
По данным МДН
источник