我有一些循环2种方法的代码。
方法2使用XMLHttpRequest
检查URL。
我遇到的问题是,当Internet处于活动状态时,它会继续循环,但是一旦我关闭Internet,XMLHttpRequest就会失败并停止循环。
代码如下:
one() {
return new Promise(resolve=> {
// Does something and returns either true or false
})
}
two() {
return new Promise(resolve => {
const httpRequest = new XMLHttpRequest();
httpRequest.open("GET", 'someurl', true);
httpRequest.send();
httpRequest.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
resolve(this);
}
};
})
}
loop() {
setTimeout(() => {
this.one()
.then(()=>this.two().then(response => {
if (response.status === 200) {
// Its True
} else {
// Its False
}
}))
.then(()=>this.loop())
}, 5000);
}
}
我怎样才能使它无论如何继续循环播放?
答案 0 :(得分:0)
尝试添加onerror处理程序
httpRequest.onerror = function() {
resolve({ error: true });
};
另外,您可能想抛出并捕获错误
two() {
return new Promise((resolve, reject) {
// ...
httpRequest.onerror = function() {
reject();
};
});
}
loop() {
setTimeout(() => {
this.one()
.then(()=>this.two()
// ...
.then(() => this.loop())
.catch(() => this.loop())
}, 5000);
}
第二种方法使您可以立即中断Promise链,如果您有three
,four
等方法,这可能会有所帮助。