对垃圾收集的 HTTP 请求的 HTTP 响应会发生什么情况

What happens with a HTTP response to a garbage-collected HTTP request?

本文关键字:HTTP 什么情况 响应 请求      更新时间:2023-09-26

Background

我有一个通过 OAuth 2.0 协议向云服务进行身份验证的应用程序。我使用第三方库发出HTTP请求并将对该库的调用包装在Promise中。我还确保此调用可以超时。代码基本上看起来像这样:

var authenticate = new Promise (resolve, reject) {
      service.authenticate(callback); // The third party library HTTP request
      if (responseData === 'authenticated') {
          resolve();
      } else {
          reject();
      }
}
var timeout = new Promise (resolve, reject) {
    setTimout (function() {reject();}, 2000}
    }
Promise.race([authenticate, timeout])
    .then(resolved)
    .catch(rejected);

如果前一个身份验证被拒绝,应用会立即进行新的身份验证尝试。这意味着会立即将新Promise分配给var authenticate。这意味着分配给authenticate的前面Promise会被垃圾收集(我猜 - 如果我错了,请纠正我)。

问题

如果云服务使用与垃圾回收Promise相关的访问令牌进行响应,会发生什么情况?

承诺不是垃圾回收。

请注意,resolvereject需要以某种方式传递到执行异步身份验证的函数中,否则以后无法调用它们,因此让我们假设它说:

service.authenticate(resolve, reject);

这很重要,因为为了完成身份验证,函数显然需要保留函数resolvereject,这反过来又使返回的承诺保持活动状态,无论authenticate是否仍然引用它。

因此,将要发生的事情是,承诺将像人们希望的那样解决(或拒绝如果有错误)。

您的代码已经放弃它的事实不会改变这一点。

如果它拒绝,那么大多数浏览器将在 Web 控制台中显示有关此未处理的拒绝承诺的错误,因为这被视为编程错误。