对垃圾收集的 HTTP 请求的 HTTP 响应会发生什么情况
What happens with a HTTP response to a garbage-collected HTTP request?
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
相关的访问令牌进行响应,会发生什么情况?
承诺不是垃圾回收。
请注意,resolve
和reject
需要以某种方式传递到执行异步身份验证的函数中,否则以后无法调用它们,因此让我们假设它说:
service.authenticate(resolve, reject);
这很重要,因为为了完成身份验证,函数显然需要保留函数resolve
和reject
,这反过来又使返回的承诺保持活动状态,无论authenticate
是否仍然引用它。
因此,将要发生的事情是,承诺将像人们希望的那样解决(或拒绝如果有错误)。
您的代码已经放弃它的事实不会改变这一点。
如果它拒绝,那么大多数浏览器将在 Web 控制台中显示有关此未处理的拒绝承诺的错误,因为这被视为编程错误。
相关文章:
- 在什么情况下需要同时使用compile&链接函数的角度
- 在什么情况下,Array.observe的“add”事件会触发
- 用户单击带有哈希值的链接以访问该页面,如果禁用Javascript会发生什么情况
- 在什么情况下我们需要在javsacript中实现单例类
- 在什么情况下,应该.deep.equal失败,但使用JSON.stringify进行比较工作正常
- 在 301 重定向期间,Google Analytics cookie _ga会发生什么情况
- 当浏览器关闭时,运行Web Worker会发生什么情况
- 使用node.js模块,在什么情况下模块会被执行两次
- 更改 innerHTML 属性时处理程序会发生什么情况
- 如果在 JavaScript 中的 if 条件之后在执行块中使用两个等于而不是只有一个,会发生什么情况
- 如果取消对本地存储的写入,会发生什么情况
- 当您不再持有对 ES6-Promise 的引用时会发生什么情况
- 对垃圾收集的 HTTP 请求的 HTTP 响应会发生什么情况
- 更改对象的原型时会发生什么情况
- 如果工作线程发布消息时主线程繁忙,会发生什么情况
- 在什么情况下浏览器拒绝继续调用 setInterval 回调
- 如果调用了JavaScript事件侦听器而缺少目标元素,会发生什么情况
- 如果您在提交表单之前尝试重定向,会发生什么情况
- 在什么情况下,您会使用一个返回另一个函数(Javascript)的函数
- 在什么情况下我们不应该在javascript中使用php