所以我试图使用XMLHttpRequest的timeout属性来恢复"我的程序在数据请求超时时。基本上如果它无法检索数据,我希望它再试一次。目前我的代码看起来像这样(删除了完整的URL以便整齐地适应它):
function pullRequest(){
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (this.readyState === 4) {
jsonDecode = this.responseText;
json = JSON.parse(jsonDecode);
ask = (json.result.Ask);
bid = (json.result.Bid);
}
}
xhr.open("GET","<URL>",true);
xhr.send();
}
我并没有完全遵循如何实现超时属性,或者它是否会按照我想要的方式执行。我在xhr.open
之后添加了以下两行,但它抛出了错误:
xhr.timeout = 5000;
xhr.ontimeout = pullRequest()
如果超时,基本上在我脑海中,再次运行pullRequest
功能。我确定这可能不是一个好主意,但我没有足够的经验知道原因。对于它的价值,错误的片段如下:
...\node_modules\xmlhttprequest\lib\XMLHttpRequest.js:165
settings = {
^
RangeError: Maximum call stack size exceeded at exports.XMLHttpRequest.open
任何关于如何实现我的目标的建议,或者对一些有助于我的文献的观点都将不胜感激。
谢谢!
答案 0 :(得分:3)
问题是你正在调用 pullRequest
:
xhr.ontimeout = pullRequest()
// ------------------------^^
由于它立即调用自身,然后再次调用自身,并再次调用自身等,最终在达到环境的最大递归级别时耗尽堆栈。
你不想在那里调用,你只想将函数引用分配给ontimeout
,以便如果超时发生,你的函数被叫:
xhr.ontimeout = pullRequest
// No () ------------------^