我想在发出请求之前检查我的应用程序所尝试的服务器是否可以访问(当可以访问互联网时)。
我正在使用Fetch API,现在我正在使用功能超时,但是我的问题是有什么方法可以检查服务器是否可以访问。
我尝试使用all-reacheable npm包并添加了以下代码,但我没有得到任何回叫响应。
isReachable([
'http://aposddasd.com',
'http://google.com'
], (err, reachable, host) => {
console.log('Server is' + reachable); //=> false
console.log('App log' + host); //=> 'http://aposddasd.com'
});
你能帮助我找到实现这个目标的最佳途径吗?
答案 0 :(得分:7)
您可以使用Promise.race()
来回复第一个要解决或拒绝的承诺 - 实际上它们非常棒!在这里查看文档:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/race
这是一个简单的功能,在3ms后超时 - 它使用httpbin来模拟5s的延迟:
const isAvailable = () => {
const timeout = new Promise((resolve, reject) => {
setTimeout(reject, 300, 'Request timed out');
});
const request = fetch('https://httpbin.org/delay/5');
return Promise
.race([timeout, request])
.then(response => alert('It worked :)'))
.catch(error => alert('It timed out :('));
}
isAvailable();
答案 1 :(得分:1)
我担心是否有任何功能。但是你可以将Fetch API放在一个javascript setTimeout()中,例如20秒。如果你没有得到20秒的结果,可能无法访问服务器。
setTimeout({ this.FetchData(); }, 20000);