我想在发出请求之前检查我的应用程序正在尝试访问的服务器是否可访问(当可以访问互联网时).
我正在使用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' });
你能帮助我找到最好的方法吗?
您可以使用一个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();
在这里查看小提琴:https://jsfiddle.net/edcs/8Lcg8a8j/10/