Angular HttpPromise: "success"/"error" 메서드와 "then" 인수 간의 차이
Angular에 따라JS 문서, 호출처$http
다음을 반환합니다.
표준 that 메서드 및 success와 error라는2개의 http 고유의 메서드를 가진 약속 개체를 반환합니다.그런 다음 메서드는 성공 인수와 응답 개체와 함께 호출되는 오류 콜백이라는2개의 인수를 사용합니다.success 메서드와 error 메서드는 단일 인수(요구가 각각 성공 또는 실패했을 때 호출되는 함수)를 사용합니다.이러한 함수에 전달되는 인수는 그 당시 메서드에 전달된 응답 오브젝트의 비구조화된 표현입니다.
response
는 어떤 않지만, 는 그 를 알 수 .
- 이 '/'의 로 전달되다
promise.then
- 의 인수로 전달된
promise.success
/promise.error
의
없나요?이 두 가지 다른 방법으로 동일한 콜백을 전달하면 무슨 의미가 있습니까?
여기 이미 몇 가지 좋은 답이 있다.그러나 병렬화의 차이를 실감할 수 있습니다.
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()
NB 이 답변은 사실 올바르지 않습니다.아래의 코멘트에서 지적된 바와 같이 success()는 원래 약속을 반환합니다.변경하지 않고 OP에 편집을 맡깁니다.
둘의 가장 큰 차이점은.then()
을하고 call은 약속(콜백에서 반환된 값)을 반환합니다..success()
보다 전통적인 콜백 등록 방법이며 약속을 반환하지 않습니다.
베이스 .then()
)를 사용하면, 간단하게 약속을 체인 할 수 있습니다(콜의 실행, 결과의 해석, 결과의 해석, 다른 콜의 실행 등).
.success()
method는 콜 체인을 할 필요도 없고 Promise API(라우팅 등)를 사용할 필요도 없는 편리한 방법입니다.
요컨대:
.then()
, 더 하게 - Promise API, Promise API.success()
-약속은반환되지않지만약간편리한구문을제공합니다.
간단한 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 을 서포트할 필요가 있는 경우는, 다음과 같이 .timeout() 및 .timeout() 를 써 주세요(IE 의 메서드는 다릅니다).
.then(successHandler)
['catch'](errorHandler)
작업 예:
다음은 처리 오류 등에 대한 기억을 되살리기 위해 좀 더 코디한 형식으로 쓴 것입니다.
http://jsfiddle.net/nalberg/v95tekz2/
마지막으로 차이점을 나타내는 코드 예를 다음에 나타냅니다.
success \ 오류:
$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 레거시 약속 메서드의 성공과 오류는 폐지되었습니다.대신 standard then method를 사용합니다.$httpProvider.useLegacyPromise의 경우확장이 false로 설정되면 이러한 메서드는 $http/legacy 오류를 발생시킵니다.
링크: https://code.angularjs.org/1.5.7/docs/api/ng/service/$http
언급URL : https://stackoverflow.com/questions/16385278/angular-httppromise-difference-between-success-error-methods-and-thens-a
'programing' 카테고리의 다른 글
NewtonSoft를 사용하여 JSON 개체의 속성을 업데이트하는 방법 (0) | 2023.03.14 |
---|---|
모든 약속이 해결될 때까지 기다립니다. (0) | 2023.03.14 |
Ajax 및 키 프레스를 사용하여 검색 최적화 (0) | 2023.03.14 |
IO를 변환하는 가장 효율적인 방법읽기바이트 배열에 근접 (0) | 2023.03.14 |
양호한 JWT 인증 필터 설계 방법 (0) | 2023.03.14 |