0

Я столкнулся с этим сложным сценарием, когда цепляю обещания на заводе или передал его контроллеру.Фабрика - тогда и поимка обещания цепочки в AngularJS

Пара вопросов для того же:

  • Какой выгодно? Написав , затем и уловить внутри заводской функции или в контроллере.
  • бизнес-сценарий
  • Performance Advantage

Ранее я писал тогда и ловить цепочки, как это внутри фабричного метода:

function searchReservations(lastName, arrivalDate) 
    { 
     // alert(lastName + ' ' + arrivalDate) 

      return $http({ 
      method: 'GET', 
      url: baseUrl + '/reservation?lastName='+lastName+'&arrivalDate='+arrivalDate 
      }) 
      **.then(success) 
      .catch(failure);** 

      function success(response) { 
      return response; 
      } 

      function failure(error) { 
      console.log('XHR Failed for searchReservation' + error.data); 
      return error; 
      } 
    } 

Но как новое направление, я увидел тогда и catch, который записывается как в функции контроллера. Совсем так.

HRS.searchReservations(this.searchLastName, arrivalDate).then(function(response) { 
... 
}).catch(function(response){ 
... 
}) 

Подробнее о бизнес-кейсе и преимуществах производительности я бы хотел знать здесь.

Спасибо, Анкит

+0

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

+0

Одно из преимуществ, которое я вижу в второй способ - читаемость/инкапсуляция - вы говорите со своим сервисом всегда с точки зрения «обещания», не зная, как его реализовано, - он может обслуживать постоянный или ajax-вызов или делать вызов базы данных. И сервис просто предоставляет интерфейс «обещания» без обратных вызовов. Ваш «контроллер» должен знать, как «потреблять» это.Если есть манипуляция данными внутри успеха/неудачи, то повторный вызов будет повторен, тогда первый подход к его сохранению внутри «службы» может иметь смысл. – FrailWords

+0

Для второго сценария хорошие данные - любое преимущество с точки зрения производительности? –

ответ

1

Я использую первый. Я считаю, что это чище, легче читать и позволяет вам называть свои методы, чтобы дать им дополнительную ясность.

В службах мои функции успеха и ошибки преобразуют данные ответа в формат модели представления, который будет использоваться моим контроллером.

Тогда в моем контроллере у меня также есть функция успеха и ошибки, чтобы обработать отображение этого вывода значимым образом. Но контроллер интересуется только отображением данных, в которых служба обрабатывает любые преобразования, localStorage и т. Д.

Кроме того, если у вас есть метод сбоя в вашей службе, вам необходимо указать return $q.reject(error), если вы хотите, чтобы он запускал функция catch вашего контроллера.

Примечание стороны, вы можете использовать params: ... легко и аккуратно прикрепить параметры запроса к вашему URL:

{ 
    method: 'GET', 
    url: baseUrl + '/reservation', 
    params: { 
    lastName: lastName, 
    arrivalDate: arrivalDate 
    } 
} 

Как мне нравится структурировать методы обслуживания:

function searchReservations (lastName, arrivalDate) { 
    var config = { 
    method: 'GET', 
    url: baseUrl + '/reservation', 
    params: { 
     lastName: lastName, 
     arrivalDate: arrivalDate 
    } 
    }; 
    return $http(config).then(success).catch(error); 

    //////////// 

    function success (response) { 
    return response; 
    } 

    function error (response) { 
    console.log('XHR Failed for searchReservation' + response.data); 
    return $q.reject(response); 
    } 
} 

Обратите внимание, что в этом случае вам даже не нужен метод success, потому что он ничего не делает, поэтому вы можете пропустить его полностью так: return $http(config).catch(error). Любой .then(...) на вашем контроллере все равно будет запущен.

+0

Хороший подробный ответ. Любое преимущество или комментарии к производительности? –

+0

Нет, это чисто читаемость кода, так что будущим разработчикам легко читать и следовать. Мы уделяем больше внимания ремонтопригодности, чем бритье на несколько миллисекунд от производительности. – ngDeveloper

Смежные вопросы