programing

Angular HttpPromise: "success"/"error" 메서드와 "then" 인수 간의 차이

powerit 2023. 3. 14. 21:59
반응형

Angular HttpPromise: "success"/"error" 메서드와 "then" 인수 간의 차이

Angular에 따라JS 문서, 호출처$http다음을 반환합니다.

표준 that 메서드 및 successerror라는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){/*...*/})
  1. $http.get()
  2. seqFunc1()
  3. seqFunc2()

success()핸들러는 같은 약속에 체인으로 연결되어 있기 때문에 병렬 동작을 실행합니다.

$http(/*...*/).
  success(function parFunc1(data){/*...*/}).
  success(function parFunc2(data){/*...*/})
  1. $http.get()
  2. 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

반응형