为什么fetch()超过了最大调用堆栈?

时间:2016-06-23 18:01:42

标签: javascript redux-thunk

这实际上是来自redux-thunk示例的代码:

function fetchSecretSauce() {
  return fetch('https://www.google.com/search?q=secret+sauce');
}

以下是我正在使用的内容:

const fetch = () => {
    	return fetch('https://www.google.com/search?q=secret+sauce')
    }
    
    console.log(fetch())

如果您“运行代码段”,则会收到错误消息:

  

未捕获RangeError:超出最大调用堆栈大小

我也尝试了不同的链接。

1 个答案:

答案 0 :(得分:1)

您的小提琴不正确,并不代表您从redux-thunk提供的示例。在他们的示例中,他们使用名为fetch的函数包装fetchSecretSauce请求。你所做的是声明一个函数fetch,它调用一个函数fetch(你刚刚定义的函数),从而通过一遍又一遍地调用自己来创建一个无限循环。

JavaScript引擎对可以调用某些内容的次数有限制。当达到此限制时,JavaScript引擎会这样思考:

  

我相信这会永远持续下去,所以我会阻止任何坏事   发生并立即终止它。我还会给你这个描述性的   消息:Uncaught RangeError: Maximum call stack size exceeded

在下面你会找到一个与你的相同的例子减去函数名称。点击"运行代码段"而且你会看到同样的无限循环:



function infiniteLoop() {
  return infiniteLoop('https://www.google.com/search?q=secret+sauce');
}

console.log(foo());




完全按照他们的示例和重命名包装函数完全不同。将其命名为您想要的任何名称,只需不要将其命名为fetch

function searchGoogleForSecretSauce() {
  return fetch('https://www.google.com/search?q=secret+sauce');
}