Javascript TypeError:(中间值)(…)在自调用函数中未定义

Javascript TypeError:(中间值)(…)在自调用函数中未定义,javascript,Javascript,所以我在这个错误后读到,很明显,有一个分号丢失了? 但我根本不知道具体在哪里: <script> (() => { fetch('/testmode') .then(response => { return response.json(); }).then(body => { console.log('testmode:', body); if (body) {

所以我在这个错误后读到,很明显,有一个分号丢失了? 但我根本不知道具体在哪里:

 <script>
  (() => {
    fetch('/testmode')
      .then(response => {
        return response.json();
      }).then(body => {
        console.log('testmode:', body);
        if (body) {
          document.querySelector("link[rel='shortcut icon']").href = "favicon.test.ico";
        } else {
          document.querySelector("link[rel='shortcut icon']").href = "favicon.ico";
        };
    });
  })().catch(err => {
    console.log(err);
  });
  </script>

(() => {
获取(“/testmode”)
。然后(响应=>{
返回response.json();
})。然后(body=>{
log('testmode:',body);
如果(正文){
document.querySelector(“link[rel='shortcuticon']”)。href=“favicon.test.ico”;
}否则{
document.querySelector(“link[rel='shortcuticon']”)。href=“favicon.ico”;
};
});
})()捕获(错误=>{
控制台日志(err);
});
我已经把分号放在了几乎所有的地方,以找出它可能丢失的地方,但我就是不工作

你知道我在这里遗漏了什么吗?有趣的是,当我编写async()时。。。然后错误消失了,但我不能使用async,因为并非所有浏览器都支持它


谢谢

不,没有分号丢失。您刚刚错误地放置了
catch
调用,它应该直接进入承诺链:

fetch('/testmode').then(response => {
  return response.json();
}).then(body => {
  console.log('testmode:', body);
  document.querySelector("link[rel='shortcut icon']").href = body
    ? "favicon.test.ico"
    : "favicon.ico";
}).catch(err => {
  console.log(err);
});
你甚至不需要这里的生命-没有需要保护的局部变量。如果仍要使用,请将整个内容包装起来:

(() => {
  fetch('/testmode').then(response => {
    return response.json();
  }).then(body => {
    console.log('testmode:', body);
    document.querySelector("link[rel='shortcut icon']").href = body
      ? "favicon.test.ico"
      : "favicon.ico";
  }).catch(err => {
    console.log(err);
  });
})();
返回中间值:

(() => {
  return fetch('/testmode').then(response => {
//^^^^^^
    return response.json();
  }).then(body => {
    console.log('testmode:', body);
    document.querySelector("link[rel='shortcut icon']").href = body
      ? "favicon.test.ico"
      : "favicon.ico";
  });
})().catch(err => {
  console.log(err);
});

您没有返回获取承诺,即将捕获附加到
fetch
使用异步编写代码,然后使用transpiler。
缺少分号?
是什么导致您得出这个结论的?@Keith以
开头的表达式非常常见(
如果上一个表达式缺少分号,将被错误地解释为对上一个表达式的函数调用,这是由于ASI未能在
标记之前的换行符中插入。