programing

Angular $http : 'timeout' 설정에 대한 약속 설정

showcode 2023. 3. 11. 09:37
반응형

Angular $http : 'timeout' 설정에 대한 약속 설정

Angular docs에서는 '타임아웃' 설정을 수치 또는 약속 중 하나로 설정할 수 있다고 기재되어 있습니다.

timeout – {number|Promise}: 밀리초 단위의 타임아웃 또는 해결되면 요구를 중단하는 약속.

하지만 약속을 어떻게 해야 할지 모르겠어요.번호와 약속을 설정하려면 어떻게 해야 합니까?기본적으로 http 콜(약속)이 타임아웃으로 인해 에러가 났는지 알고 싶습니다.난 차이를 구별할 수 있어야 해도와주셔서 감사합니다!!!

이 코드는 $httpBackend 소스 코드입니다.

if (timeout > 0) {
  var timeoutId = $browserDefer(timeoutRequest, timeout);
} else if (timeout && timeout.then) {
  timeout.then(timeoutRequest);
}

function timeoutRequest() {
  status = ABORTED;
  jsonpDone && jsonpDone();
  xhr && xhr.abort();
}

timeout.then(timeoutRequest)는 약속이 해결되면(거부되지 않음) timeoutRequest가 호출되고 xhr 요구가 중단됨을 의미합니다.


요구가 타임아웃일 경우reject.status === 0(주의: 네트워크 장애의 경우 0도 됩니다).예:

app.run(function($http, $q, $timeout){

  var deferred = $q.defer();

  $http.get('/path/to/api', { timeout: deferred.promise })
    .then(function(){
      // success handler
    },function(reject){
      // error handler            
      if(reject.status === 0) {
         // $http timeout
      } else {
         // response error status from server 
      }
    });

  $timeout(function() {
    deferred.resolve(); // this aborts the request!
  }, 1000);
});

같은 질문이 있습니다.Http Interceptor를 사용한 Angular 1.5 타임아웃을 http에서 구현하는 방법에 대해 확인하실 수 있습니다.가로채기. jsFiddle은 anwser에 포함되어 있습니다.모든 크레딧은 https://stackoverflow.com/users/3959997/mita로 보내주시기 바랍니다.

임베디드 시스템에서 작업하고 있었습니다.물리 디바이스이기 때문에 가끔 외출을 하고 있었습니다.따라서 $timeout을 사용하여 며칠, 몇 달, 몇 년 동안 전원이 켜져 있었습니다.이 동작은 수정되었습니다.

빠른 예(http 약속의 타임아웃 래퍼)

모듈

var myApp = angular.module('myApp',['ngRoute']);

서비스

var yourServiceModule = myApp.service('YourService', function ($http) {
    this.your_method = function (a) { return a*a};
});

컨트롤러

//just wrap your service,http call using $timeout
$timeout(function() {
    //vanilla service call
    YourService.your_method().then(
              function (response) {
                 //console.log("sync_with_cloud: "+ response);
                 $scope.check_cloud_port_statuses_progress=100;
                 //...
             },
              function(data) {
                  // Handle error here

                $rootScope.global_config_1 += "\nError(333): cant connect to cloud at "+Date.now();+"\n\n";
                $scope.check_cloud_port_statuses_progress = -1;
              }
    );

}, 8);

언급URL : https://stackoverflow.com/questions/21915834/angular-http-setting-a-promise-on-the-timeout-config

반응형