当XMLHttpRequest Internet关闭时,承诺停止循环

时间:2018-09-13 18:38:43

标签: javascript promise xmlhttprequest

我有一些循环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);
    }

}

我怎样才能使它无论如何继续循环播放?

1 个答案:

答案 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链,如果您有threefour等方法,这可能会有所帮助。