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

时间:2016-02-22 20:51:44

标签: javascript http oauth-2.0 garbage-collection es6-promise

背景

我有一个通过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。这意味着分配给Promise的前面的authenticate会被垃圾收集(我猜 - 如果我错了,请纠正我)。

问题

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

1 个答案:

答案 0 :(得分:0)

承诺不是垃圾收集。

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

service.authenticate(resolve, reject);

这很重要,因为为了完成身份验证,该功能显然需要保留函数resolvereject,这反过来使得返回的promise保持活动状态,而不管是否{{ 1}}仍然引用它。

所以,正如人们所希望的那样,承诺将会解决(或拒绝,如果有错误)。

你的代码放弃它的事实并没有改变这一点。

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