在下面的代码中,有时未定义xsrfCookie
。我估计约有20%的来电。
这似乎只发生在MacOS Safari和Safari en Chrome的iOS中。我正在使用Angular 1.5.6。
$http.get('some_url')
.success(function() {
var xsrfCookie = $cookies.get('XSRF-TOKEN');
});
在xsrfCookie之前或之后设置断点并记录
document.cookie
甚至$cookies.get('XSRF-TOKEN')
始终显示预期的XSRF令牌。我只能想象这与GET中的XSRF令牌有关,它与成功函数并行地异步设置,但是我在
angular.get()
代码中找不到任何暗示这一点的东西。有没有人遇到过这个问题?
最佳答案
到目前为止,我已经通过在超时中包装对Cookie的检索来解决了这一问题:
$http.get('some_url')
.success(function() {
$timeout(function() {
var xsrfCookie = $cookies.get('XSRF-TOKEN');
}, 1);
});
不幸的是,我无法找到为什么需要这样做(期望它可能与AngularJS 1.5摘要循环有关),但是我确实发现了其他一些东西:
最初的问题仅在iOS和MacOS上的Safari中出现,并且仅在某些时间出现。根据环境(内部网,互联网)的不同,但每天都有所不同,我的失败率有时是100%,有时甚至会低到10%。
如果我将
document.cookie
作为成功回调中的第一件事登录,则它也为空(同样仅在Safari中,有时也是如此)可能是
$timeout
仅在摘要完成后才触发,即使没有毫秒参数的$timeout
也可以工作像
onInit
这样的钩子仅在摘要循环完成后才运行,但是此调用涉及多个服务调用,我不知道该如何涉及。