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未能在(
标记之前的换行符中插入。