2017-09-10 3 views
-1

私は$http.postにタイムアウトを追加しました。理由は、$http.postが呼び出されたときに$htt.post(url.com)と通信し、タイムアウトに達した場合にはURLの要求を停止する必要があるためです。ここに私のコードは次のとおりです。私たちが見ることができるように

var canceler = $q.defer(); 
$http.post('www.example.com/api',{ 
    //some json data 
}, {timeout: canceler.promise}).then(function(response){ 
    alert("Success"); 
}); 

// the timeout 
$timeout(function(){ 
    $rootScope.$apply(function(){ 
     canceler.resolve(); 
     alert("Process stopped!"); 
    }); 
}, 40000); 

は、私が40secondsにタイムアウトを設定します。 $http.postリクエストが実行され、40秒に満たされるたびにalert("Process stopped")に警告します。しかし、私の問題は、要求$http.postが40秒未満で実行されても、それはまだ解雇されるべきでないalert("Process stopped!")を警告することです。私を助けてください。要求が40秒未満の場合、アラートは起動しないでください。

+0

リクエストを完了してからキャンセルするかどうかを確認する必要があります。 BTWのデバッグでは、 'alert()'がプロセスを停止するので、それは良くありません。より良いconsole.logを使用するか、それでもなおnpm 'debug'モジュールを使用してください。 – Mikkel

+0

どういう意味ですか? @Mikkel – user8143979

+0

あなたはどの部分について不明ですか?あなたの答えは、あなたが船上でアドバイスを受けたことを示唆しています – Mikkel

答えて

0

変数isCompletedがブール値で追加されました。

var isCompleted = false; 
$http.post('url',{ 
    // datas 
},{timeout:canceler.promise}).then(function(){ 
    // request completed 
    isCompleted = true; 
}); 

$timeout(function(){ 
    if(isCompleted == true){ 
     // Do nothing because already completed the request 
    }else{ 
     // timeout of 40 seconds is reached. Notify User 

      $rootScope.$apply(function(){ 
      $ionicPopup.alert({ 
         title: 'Oops, Something went wrong!', 
         template: 'It looks like that you\'re not connected to the internet or you have a poor connection.' 
        }); 
        canceler.resolve(); 


       }); 
    } 
}); 
関連する問題