Javascript 如何在arrow函数中封装try-catch块以调用api?
我有一个arrow函数,它从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' } })
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 => {})