[英]Why is catch() not working with ajax requests?
const errorTest = () => { const result = $.get("http://data.fixer.io/api/latest?access_key=9790286e305d82fbde77cc1948cf847c&format=1"); result .then(val => console.log(val.rates)) .catch(err => console.error(err)) } errorTest()
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
.then()
有效,但catch()
无效。 它一直显示错误: result.then(...).catch is not a function at errorTest.
为什么? $.get()
应该返回一个承诺,并将其分配给result
。 这就是为什么.then()
有效,但为什么catch()
无效?
如果我使用fetch()
它会起作用。
const result = fetch("http://data.fixer.io/api/latest?access_key=9790286e305d82fbde77cc1948cf847c&format=1");
那么,为什么catch()
不能处理 ajax 请求呢?
附加问题
const errorTest = (a, b) => { const result = $.get("http://dataa.fixer.io/api/latest?access_key=9790286e305d82fbde77cc1948cf847c&format=1"); result .then(val => console.log(val.rates)) //.catch(err => console.error("INSIDE ERROR" + err)) } try { errorTest() } catch(err) { console.log("OUTSIDE ERROR!" + err) }
该链接故意不正确以获取错误。 如果我取消注释函数内的catch()
,则catch()
内的将捕获错误。 如果我注释掉,或者只是删除内部catch()
,我希望外部catch()
得到错误,但事实并非如此。 为什么?
tl;博士
关于您的问题,我认为它不会引发异常,这就是.then()
起作用的原因。
但是,我建议使用async/await
代替基于回调的 promise 语法。 这是一种更清洁的方式。
const errorTest = async () => {
try {
const result = await $.get("http://data.fixer.io/api/latest?access_key=ACCESS_TOKEN&format=1");
console.log(result.rates);
} catch(e) {
console.err(e);
}
}
errorTest()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.