Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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
Javascript 使用多个可能的服务器获取API_Javascript_Fetch - Fatal编程技术网

Javascript 使用多个可能的服务器获取API

Javascript 使用多个可能的服务器获取API,javascript,fetch,Javascript,Fetch,我想知道允许JS从多个可能的位置获取信息的标准方法是什么。在我的例子中,我试图通过jsfetch在我的web应用程序上填充一个表,但是根据情况,有两个可能的服务器可以在线或离线(我有一个localhost服务器和一个在线服务器)。如果两者都在线,我只想从其中一个获取数据(或者至少只使用其中一个的数据填充表) 我已经阅读了一些Promise.all函数,但是我一直在使用它,并且找不到太多的文档来帮助我解决这个问题(我认为如果其中一个获取失败,而其他获取成功,那么问题可能会出现)。我还尝试研究了一些

我想知道允许JS从多个可能的位置获取信息的标准方法是什么。在我的例子中,我试图通过jsfetch在我的web应用程序上填充一个表,但是根据情况,有两个可能的服务器可以在线或离线(我有一个localhost服务器和一个在线服务器)。如果两者都在线,我只想从其中一个获取数据(或者至少只使用其中一个的数据填充表)

我已经阅读了一些Promise.all函数,但是我一直在使用它,并且找不到太多的文档来帮助我解决这个问题(我认为如果其中一个获取失败,而其他获取成功,那么问题可能会出现)。我还尝试研究了一些相当深入的方法(最多20行代码),以查看服务器是否实际在线,但这似乎很快就会变得非常混乱

我也曾尝试过在所有情况下都从这两个对象中获取数据,但出于某种原因,这会在我的表中填充未定义的值,而不是我所期望的值(对此的调试似乎表明,一些获取返回对象和一些返回数组的原因我无法理解,可能是因为异步性质)


是否有一种方法,我应该使用或进一步研究这一点?这个问题是在现实世界的应用程序中出现的,还是开发人员总是确保所有数据都来自同一台服务器?我应该只从一台服务器获取数据,因此停止运行localhost one吗?感谢您的帮助。

首先,最好指出您可能不希望为生产应用程序执行此操作。我只是回答使用来自不同回迁的多个可能值中的一个的问题,特别是首先解决的那个

正如您可能知道的,只有在所有回迁解析时,才会解析,并且它将使用包含每个回迁解析值的数组进行解析。如果任何回迁被拒绝,Promise.all()也会拒绝

一个更简单的方法是使用第一个输入承诺值进行解析。例如:

const promise1 = fetch('https://jsonplaceholder.typicode.com/todos/1')
  .then(response => response.json())

const promise2 = fetch('https://jsonplaceholder.typicode.com/todos/2')
  .then(response => response.json())

Promise.race([promise1, promise2]).then((value) => {
  console.log(value)
});

我会考虑在每个服务器上创建一个健康检查端点,<代码> /Health,它只返回一个200,可能是{状态:“健康”}。您需要ping每个服务器以查看它是否在线,然后发出请求。或者,您可以设置从第一优先级的获取,如果它没有成功返回,您可以在错误处理中调用第二优先级。谢谢您的回答。它最终并没有帮到我,因为即使我试图先检查一个健康的服务器,或者将代码放在块的catch(err)部分,我仍然会遇到一些未定义的问题。下面是Promise.race()的答案,它似乎已经为我提供了我所需要的(尽管我还不确定我是否理解为什么我首先拥有所有未定义的)。谢谢你的回答。这似乎正是我要找的。这意味着Promise.race()永远无法解决多个获取的问题,对吗?是否有任何实例认为拥有多个可能的服务器是一种好的做法?例如,用户可能在脱机模式下访问web应用程序,在自己的计算机上访问服务器的副本(因此是localhost部分)?正确,Promise.race()永远无法使用多个获取进行解析。关于最佳实践,也许有人能比我回答得更好,但这是我的观点。1) 你的本地服务器每次都会打败远程服务器,所以你基本上把它短路了。2) 这是过于健谈,你现在发送2个请求,每次保证。3) 如果服务器之间存在数据不匹配怎么办?知道你在和谁交往不是更好吗?