Android 如何检查在react native中是否可以访问服务器
在发出请求之前,我想检查我的应用尝试访问的服务器是否可以访问(当可以访问internet时) 我正在使用fetchapi,现在我正在使用函数timeout,它工作得很好,但我的问题是,是否有任何方法可以检查服务器是否可以访问Android 如何检查在react native中是否可以访问服务器,android,react-native,fetch,Android,React Native,Fetch,在发出请求之前,我想检查我的应用尝试访问的服务器是否可以访问(当可以访问internet时) 我正在使用fetchapi,现在我正在使用函数timeout,它工作得很好,但我的问题是,是否有任何方法可以检查服务器是否可以访问 setTimeout({ this.FetchData(); }, 20000); 我尝试使用npm包并添加了以下代码,但没有得到任何回调响应 isReachable([ 'http://aposddasd.com', 'http://google.com
setTimeout({ this.FetchData(); }, 20000);
我尝试使用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()
,它将返回第一个要解决或拒绝的承诺-实际上它们非常棒!在此处签出文档:
下面是一个在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();
在这里查看小提琴:我感觉,
所有可访问的
可能无法在React Native上工作,因为它使用fetch API的自定义实现作为设备自身HTTP层的抽象。在发出请求之前,是否有任何原因要检查主机是否可访问?Fetch和Promissions使处理HTTP错误变得非常简单,可能会给您的用户带来更好的体验。如果我的服务器停机,Fetch API在捕获错误之前需要大约120秒,因此我正在寻找一些快速的方法,我添加了函数超时,但想知道是否有更好的选择,是-您做出了一个新的承诺,该承诺在300毫秒后被拒绝,然后您可以在fetch()
返回承诺时“竞争”任意多个回迁。完成的第一个承诺得到了解决。因此,如果超时承诺在抓取之前被拒绝,您可以假设您的服务器无法访问。返回超时:(在android上)