AngularJS doc 에 따르면 $http다음 을 반환하기 위해 호출합니다 .
표준 then 메소드와 두 개의 http 특정 메소드 ( success 및 error)를 가진 promise 객체를 리턴합니다 . 다음 방법은 두 개의 인수 소요 성공 과 오류 응답 객체로 호출 될 콜백을. 성공 및 오류 요청이 성공하거나 각각 실패 할 때 호출되는 함수 – 방법은 하나의 인수를. 이 함수에 전달 된 인수는 then 메소드에 전달 된 응답 객체의 구조화 된 표현입니다.
어떤 경우에는 response객체가 구조화 되었다는 사실을 제외하고 는 차이점이 없습니다.
- 성공 / 오류 콜백은 다음과 같은 인수로 전달됩니다.
promise.then - 약속 의
promise.success/promise.error메소드에 대한 인수로 전달 된 콜백
있어요? 겉보기에 동일한 콜백을 전달하는이 두 가지 방법의 요점은 무엇입니까?
답변
NB 이 답변은 사실 틀 렸습니다. 아래의 주석에서 지적한 것처럼 success ()는 원래 약속을 반환합니다. 나는 변하지 않을 것이다. 편집하려면 OP로 두십시오.
2의 주요 차이점은 .then()콜백이 콜백에서 반환 된 값으로 해결 된 약속을 반환하는 반면 .success()콜백을 등록하는 전통적인 방법이며 약속을 반환하지 않는다는 것입니다.
약속 기반의 콜백 ( .then()) 체인 약속 (전화를 할 결과를 해석하고 쉽게 그것을 확인 후 등 또 다른 호출을 수행, 결과를 해석, 다른 통화를 할).
이 .success()방법은 통화를 연결하거나 약속 API와 함께 작업 할 필요가없는 경우 (예 : 라우팅) 간소화되고 편리한 방법입니다.
한마디로 :
.then()-promise API의 강력한 기능이지만 약간 더 장황한.success()-약속을 반환하지 않지만 약간 더 편리한 구문을 제공합니다.
답변
여기에 이미 좋은 답변이 있습니다. 그러나 제공되는 병렬 처리의 차이점을 집으로 몰아 넣는 것이 좋습니다.
success()원래 약속을 반환then()새로운 약속을 돌려줍니다
차이점은 then()순차적 호출을 유발한다는 것입니다. 각 호출은 새로운 약속을 반환하기 때문입니다.
$http.get(/*...*/).
then(function seqFunc1(response){/*...*/}).
then(function seqFunc2(response){/*...*/})
$http.get()seqFunc1()seqFunc2()
success() 핸들러는 동일한 약속에 따라 연결되므로 병렬 작업을 구동합니다.
$http(/*...*/).
success(function parFunc1(data){/*...*/}).
success(function parFunc2(data){/*...*/})
$http.get()parFunc1(),parFunc2()병렬
답변
간단한 GET 요청을위한 일부 코드 예제. 차이를 이해하는 데 도움이 될 수 있습니다. 사용 then:
$http.get('/someURL').then(function(response) {
var data = response.data,
status = response.status,
header = response.header,
config = response.config;
// success handler
}, function(response) {
var data = response.data,
status = response.status,
header = response.header,
config = response.config;
// error handler
});
사용 success/ error:
$http.get('/someURL').success(function(data, status, header, config) {
// success handler
}).error(function(data, status, header, config) {
// error handler
});
답변
.then ()은 체인 가능하며 이전 .then ()이 해결 될 때까지 기다립니다.
.success ()와 .error ()는 연결될 수 있지만, 한 번에 모두 발사됩니다.
.success () 및 .error ()는 간단한 호출 (간편한 제조업체)에 적합합니다.
$http.post('/getUser').success(function(user){
...
})
따라서 이것을 입력하지 않아도됩니다.
$http.post('getUser').then(function(response){
var user = response.data;
})
그러나 일반적으로 .catch ()로 모든 오류를 처리합니다.
$http.get(...)
.then(function(response){
// successHandler
// do some stuff
return $http.get('/somethingelse') // get more data
})
.then(anotherSuccessHandler)
.catch(errorHandler)
<= IE8을 지원 해야하는 경우 .catch () 및 .finally ()를 다음과 같이 작성하십시오 (IE의 예약 메소드).
.then(successHandler)
['catch'](errorHandler)
작업 예 :
다음은 오류 등을 처리하여 모든 메모리가 어떻게 재생되는지에 대해 메모리를 새로 고치기 위해 더 코드 형식으로 작성한 것입니다.
답변
완료를 위해 차이점을 나타내는 코드 예제는 다음과 같습니다.
성공 \ 오류 :
$http.get('/someURL')
.success(function(data, status, header, config) {
// success handler
})
.error(function(data, status, header, config) {
// error handler
});
그때:
$http.get('/someURL')
.then(function(response) {
// success handler
}, function(response) {
// error handler
})
.then(function(response) {
// success handler
}, function(response) {
// error handler
})
.then(function(response) {
// success handler
}, function(response) {
// error handler
}).
답변
공식 공지 : 성공과 오류는 더 이상 사용되지 않습니다. 대신 표준 방법을 사용하십시오.
더 이상 사용되지 않음 공지 : $ http 기존 약속 방법 성공 및 오류는 더 이상 사용되지 않습니다. 대신 표준 then 메소드를 사용하십시오. $ httpProvider.useLegacyPromiseExtensions가 false로 설정된 경우 이러한 메소드는 $ http / legacy 오류를 발생시킵니다.
링크 : https://code.angularjs.org/1.5.7/docs/api/ng/service/$http
답변
