繁体   English   中英

为什么 catch() 不能处理 ajax 请求?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM