2015-04-16 2 views
2

Я читал об Угловых обещаниях получить данные из веб-службы, одна вещь, которая привлекла мое внимание, заключается в том, что Angular почему-то знает, был ли выполнен или отклонен запрос «запрос», как это понимает Angular? Проверяет ли он код состояния ответа? Можете ли вы пересмотреть эти правила?Как Угловая знает, выполнено ли обещание?

ответ

3

Ваше предположение верно!

HttpProvider, который используется $ http и $ resource, например, определяет успешный ответ как код ответа HTTP от 200 до 299 включительно.

Вы можете изменить это поведение, предоставив собственный HttpProvider. Кроме того, службы, которые используют HttpProvider, могут отменить этот ответ и заменить более подходящие условия отказа/успеха.

+0

Я отмечаю это как правильный ответ, поскольку он дал точные ответы на оба моих вопроса. – user1336321

4

This является прекрасным описанием Promises в AngularJS. Это помогло мне более полно понять, что происходит за кулисами.

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

Используя функцию Angular's(), мы можем указать, что должен сделать папа в случае каждого результата. Функция then() принимает функции 2 как параметры: функцию, которая должна выполняться, когда выполняется обещание , и функция, которая должна быть выполнена, когда обещание отклонено.

// function somewhere in father-controller.js 
var makePromiseWithSon = function() { 
// This service's function returns a promise, but we'll deal with that shortly 
SonService.getWeather() 
    // then() called when son gets back 
    .then(function(data) { 
     // promise fulfilled 
     if (data.forecast==='good') { 
      prepareFishingTrip(); 
     } else { 
      prepareSundayRoastDinner(); 
     } 
    }, function(error) { 
     // promise rejected, could log the error with: console.log('error', error); 
     prepareSundayRoastDinner(); 
    }); 
}; 
+1

Спасибо @Grant, сообщение потрясающее, однако я понимаю логику «обещаний», но я не понимал, как Угловая решила, было ли обещание «выполнено» или «отвергнуто». Код, который вы разделяете, действительно полезен в качестве второго шага, где вы можете решить, что делать после того, как вы знаете результат обещания. – user1336321

+0

@ user1336321, я фактически опубликовал это, и Грант добавил детали. Извините, на самом деле это не отвечало на ваш вопрос. Вы в основном стремились понять логику решения вопроса о том, какой успешный ответ является «неудачей». Интересная тема, и Майкл сделал хорошую работу, объяснив ее чуть дальше. – MattDionis

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