Javascript 如何在arrow函数中封装try-catch块以调用api?

Javascript 如何在arrow函数中封装try-catch块以调用api?,javascript,function,ecmascript-6,promise,arrow-functions,Javascript,Function,Ecmascript 6,Promise,Arrow Functions,我有一个arrow函数,它从api调用返回一些数据。我想把它包在一个试抓块里,就像 const fetchEmployees = () => ( try{ fetch('http://localhost:6873/api/values', { method: 'GET', headers: { 'content-type': 'application/json' } })

我有一个arrow函数,它从api调用返回一些数据。我想把它包在一个试抓块里,就像

const fetchEmployees = () => (
   try{
       fetch('http://localhost:6873/api/values', {
          method: 'GET',
          headers: {
            'content-type': 'application/json'
          }
       })
         .then(response => response.json())
         .then(names => { return names })
       } catch (error) {
           return error;
       }
  )
我怎么能这么做?我拥有的完美的箭头函数是

const fetchEmployees = () => (
fetch('http://localhost:6873/api/values', {
    method: 'GET',
    headers: {
        'content-type': 'application/json'
    }
})
    .then(response => response.json())
    .then(names => names )
)
尝试使用异步/等待

const fetchEmployees=async()=>{
试一试{
let response=等待取数('http://localhost:6873/api/values', {
方法:“GET”,
标题:{
“内容类型”:“应用程序/json”
}
});
让json=wait response.json();
返回json;
}捕获(错误){
返回错误
}

}
将您的函数转换为
异步
函数:

const fetchEmployees = async () => {
  try {
    const response = await fetch("http://localhost:6873/api/values", {
      method: "GET",
      headers: {
        "content-type": "application/json"
      }
    });

    const names = await response.json();

    return names;
  } catch (error) {
    return error;
  }
};

无法在获取时使用try-catch,因为获取是异步的,而try-catch是同步的。因此,您的试捕将始终通过。若我们假设您收到了响应,并且.json()失败,那个么第二个参数是success函数,第二个参数是当.json()失败时执行的fail函数


像这样,当您在第一个函数中调用fetchEmployees时,如果一切都成功,那么将执行第一个函数,否则第二个函数将执行错误响应,在这种情况下,硬编码字符串“json failed”

为什么不在
fetch
上简单地使用
catch
?您试图捕获的错误是什么。失败。json()?顺便说一句!实际的问题是,对于arrow函数的主体,使用括号
()
而不是大括号
{}
——它只在第二种情况下有效,因为主体是一个表达式。但是您也应该
。捕获被拒绝的承诺。是否确实要
catch
块返回错误?这不是一个好主意,你应该在那里处理错误,而不是因此卖掉它。
const fetchEmployees = () => (
  fetch('http://localhost:6873/api/values', {
      method: 'GET',
      headers: {
          'content-type': 'application/json'
      }
  })
      .then(response => response.json())
      .then(names => names, error => "json failed" )
)

fetchEmployees().then(success => {}, error => {})