javascript - 为什么 catch() 不能处理 ajax 请求?
问题描述
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()
将捕获错误。如果我注释掉,或者只是删除 inside catch()
,我希望外部catch()
会得到错误,但事实并非如此。为什么?
解决方案
tl;博士
关于您的问题,我认为它只是不会引发异常,这就是.then()
有效的原因。
但是,我建议不要使用基于回调的 Promise 语法,而是使用async/await
. 这是一种更清洁的方式。
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()
推荐阅读
- java - I have an error about using class and objects
- javascript - Load bootstrap badges to a column of bootstrap table when dynamic database content loads to bootstrap table
- dma - 使用 DMA 使用 stm32f4-discovery board 从多个 ADC 通道读取数据时出现问题
- python - Python子进程在参数中使用变量时变量的引号显示
- amazon-web-services - 我看不到保存按钮,但仅在 amazon lambda 函数中看到测试按钮
- javascript - 如何将json数据添加到第一行是键的表中
- android - Flutter FormField Validator 验证失败
- reactjs - 如何在 React 中找到当前引用
- java - 想要从 Windows Command Skipt(CMD) 文件中读取代码并提取信息
- reactjs - React SWR,如何过滤/排序数据