Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何检查在react native中是否可以访问服务器_Android_React Native_Fetch - Fatal编程技术网

Android 如何检查在react native中是否可以访问服务器

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

在发出请求之前,我想检查我的应用尝试访问的服务器是否可以访问(当可以访问internet时)

我正在使用fetchapi,现在我正在使用函数timeout,它工作得很好,但我的问题是,是否有任何方法可以检查服务器是否可以访问

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上)