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

时间:2019-02-12 16:34:11

标签: javascript

所以我读完这个错误后,显然缺少分号了吗? 但我根本不知道确切的位置:

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

我已经将分号几乎放到了所有地方,以查找可能丢失的地方,但我将无法使用。

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

谢谢

1 个答案:

答案 0 :(得分:1)

不,没有分号。您刚刚将catch调用放错了位置,它应该直接放在promise链上:

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);
});

您甚至不需要在这里使用IIFE-没有要保护的局部变量。如果您仍然想使用一个,则将整个包装起来:

(() => {
  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);
});