как вернуть значение из обещания ajax

0

У меня есть метод в моем угловом контроллере 1.5, как показано ниже, но я хотел реорганизовать вызов ajax на завод, но у меня проблемы с обещаниями. Я пытаюсь добраться до точки, где в моем контроллере я могу просто вызовите метод, как показано ниже. Это возможно? Я пытаюсь избежать успеха... (function (...) в коде контроллера.

Любая помощь очень ценится.

Попытка перейти на

vm.member = someFactory.getMember(vm.id);

Существующий код рабочего контроллера

vm.myMethod = myMethod;
...

function myMethod() {
    someFactory.getMember(vm.id).success(function(response) {
      vm.member = response;
    });
}

Когда я перемещаю строку getMethod на фабрику, ответ заполняется явно, но как только я возвращаюсь к контроллеру, даже если возвращаемое значение с фабрики является ответом, результат не определен. Я знаю, что это из-за обещаний, но есть ли шаблон дизайна, который я пропускаю, или чистый способ сделать это. Используя мой подход в настоящее время мой контроллер усеян.success(function()...)

Большое спасибо!

Теги:
angular-promise

1 ответ

0

Процедура называется обезвреживанием.

Кроме того, тот факт, что success является устаревшим и должен быть заменен на then,

someFactory.getMember(vm.id).then(function(response) {
  var data = res.data;
  ...
});

вполне нормально иметь это в контроллере.

Альтернативой этому шаблону является возврат объекта самозаполнения (что-то, что ngResource $resource делает):

function getMember(...) {
  var data = {};
  $http(...).then(function (response) {
    // considering that response data is JSON object,
    // it can replace existing data object
    angular.copy(data, response.data);
  });
  return data;
}

В этом случае контроллер может мгновенно получить ссылку на объект, а привязки свойств объекта {{ vm.member.someProperty }} будут обновлены с учетом ответа.

Шаблон ограничен объектами (и массивами), скалярные значения должны быть обернуты объектами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню