如何检查服务器是否可以在 react-native 中访问
How to check if server is reachable in react-native
我想在发出请求之前检查我的应用程序尝试访问的服务器是否可以访问(当互联网可以访问时)。
我正在使用 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'
});
你能帮我看看实现这个目标的最佳方法是什么吗?
恐怕有什么功能。但是您可以将 Fetch API 放在 javascript setTimeout() 中,例如给它 20 秒。如果您在 20 秒内没有得到结果,可能是服务器无法访问。
setTimeout({ this.FetchData(); }, 20000);
您可以使用 Promise.race()
来 return 第一个 promise 来解决或拒绝 - 它们实际上非常棒!在此处查看文档:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/race
这是一个在 3 毫秒后超时的简单函数 - 它使用 httpbin 模拟 5 秒的延迟:
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();
在此处查看 fiddle:https://jsfiddle.net/edcs/8Lcg8a8j/10/
我想在发出请求之前检查我的应用程序尝试访问的服务器是否可以访问(当互联网可以访问时)。
我正在使用 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'
});
你能帮我看看实现这个目标的最佳方法是什么吗?
恐怕有什么功能。但是您可以将 Fetch API 放在 javascript setTimeout() 中,例如给它 20 秒。如果您在 20 秒内没有得到结果,可能是服务器无法访问。
setTimeout({ this.FetchData(); }, 20000);
您可以使用 Promise.race()
来 return 第一个 promise 来解决或拒绝 - 它们实际上非常棒!在此处查看文档:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/race
这是一个在 3 毫秒后超时的简单函数 - 它使用 httpbin 模拟 5 秒的延迟:
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();
在此处查看 fiddle:https://jsfiddle.net/edcs/8Lcg8a8j/10/