当前位置: 首页 > 面试题库 >

Angular $ http:在'timeout'配置上设置一个承诺

元望
2023-03-14
问题内容

在Angular$httpdocs中,它提到您可以将“超时”配置设置为数字或承诺。

超时 – {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请注意:如果网络出现故障,则该值reject.status也将等于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请求头的内容,但据我所知,它将为该方法的所有请求设置该头。我的代码中有这样的内容: 但我不希望我的每一个帖子请求都发送这个标题。有没有办法只为我想要的一个请求发送标题?还是在我提出请求后必须将其移除?

  • 我有Spring Boot(后端)应用程序,它在Tomcat(端口8080)和Angular应用程序(前端)(端口4200)上运行。 前端从后端使用rest API。如何使用带有SSL的Ngin x保护我的应用程序? 我听说我可以在nginx中将我的Spring Boot配置为反向代理,然后用SSL保护它,但我不知道怎么做。

  • HTTP 通道是一种连接到服务器的方法,使用与网络服务器相同的通讯协定(http://)和相同的端口(端口 80)。这是当你的互联网服务供应商不允许直接连接,但允许创建 HTTP 连接时使用。 注意:只限于 MySQL、PostgreSQL、SQLite 和 MariaDB。 上传通道脚本 若要使用此连接方法,首先需要做的就是上传通道脚本到服务器位于的网络服务器。 注意:ntunnel_mysql

  • HTTP 隧道是一种连接到服务器的方法,使用与网络服务器相同的通讯协定(http://)和相同的端口(端口 80)。这是当你的互联网服务供应商不允许直接连接,但允许创建 HTTP 连接时使用。 【注意】仅适用于 MySQL、PostgreSQL、SQLite 和 MariaDB。 上传隧道脚本 若要使用此连接方法,首先需要做的就是上传隧道脚本到你的服务器位于的网络服务器。 【注意】点击“导出隧道脚

  • HTTP 隧道是一种连接到服务器的方法,使用与网络服务器相同的通讯协定(http://)和相同的端口(端口 80)。这是当你的互联网服务供应商不允许直接连接,但允许创建 HTTP 连接时使用。 【注意】仅适用于 MySQL、PostgreSQL、SQLite 和 MariaDB。 上传隧道脚本 若要使用此连接方法,首先需要做的就是上传隧道脚本到你的服务器位于的网络服务器。 【注意】“ntunnel

  • HTTP 隧道是一种连接到服务器的方法,使用与网络服务器相同的通讯协定(http://)和相同的端口(端口 80)。这是当你的互联网服务供应商不允许直接连接,但允许创建 HTTP 连接时使用。 【注意】仅适用于 MySQL、PostgreSQL、SQLite 和 MariaDB。 上传隧道脚本 若要使用此连接方法,首先需要做的就是上传隧道脚本到你的服务器位于的网络服务器。 【注意】“ntunnel