javascript - 这是在 React 中使用带有承诺的三元 if else 的不好方法吗
问题描述
我使用三元 if else 来调用不同的 API(API 调用存储在另一个文件中)。
(this.props.item === "burger" ? burgerObj.GetBurger (this.props.burger_id) : pizzaObj.GetPizza (this.props.pizza_id)) // burgerObj and pizzaObj are objects of their respective classes
.then((response) => {
if(response.status === 400) {
console.log ("Bad Request")
}
else {
response.json()
.then((findresponse) => {
this.prepareFood(findresponse) // Some function call
})
}
})
.catch ((e) => {
console.log (e)
})
}
// API calls in different classes. Same is for GetPizza
GetBurger(burger_id) {
return fetch(url + 'burgerId' + burger_id , {
headers: {
'Authorization': 'Bearer ' + authorization,
'Content-Type': 'application/json',
}
})
}
这是处理此类呼叫的错误方式吗?因为当我使用这个 API 调用工作正常但代码永远不会达到承诺(.then((response) => { - 第 2 行)。如果我检查网络,我可以看到从 API 返回的响应。对不起,如果我在某个地方错了,我还是 React 的新手。请帮助我。
解决方案
使用三元是可以的。但是你可以Async/Await
用来清理回调 -
const { item, burger_id, pizza_id} = this.props;
function fetchWrapper(url) {
fetch(url, {
headers: {
Authorization: `Bearer${authorization}`,
'Content-Type': 'application/json',
}
})
.then(data => { return { data, error: null }; })
.catch(error => { return { error, data: null }; });
}
// API calls in different classes. Same is for GetPizza
async function GetBurgerAsync(burgerId) {
let response = await fetchWrapper(`url burgerId${burgerId}`);
const data = await response.json();
return data;
}
const foodType = item === 'burger' ? GetBurgerAsync(burger_id) : GetPizzaAsync(pizza_id);
if (foodType.data) {
this.prepareFood(foodType);
}
编辑:重构,包装fetch
,因为每次调用时只有 url 应该改变。令牌在所有调用中应该相同。
推荐阅读
- html - 在html中对齐项目不起作用
- php - ocmod 未显示 opencart 3 中的任何更改
- python - Groupby 具有不同聚合的不同列与下一个日期的 cumsum
- android - 'Stream 类型的值
' 不能从函数 'user' 中返回,因为它的返回类型是 'Stream '在颤抖中 - sensors - 需要建议来选择传感器
- python - 关于 dateutil.relativedelta 的问题 - 为什么输出总是为零?
- javascript - 使用 iframe 呈现用户提供的 html 代码
- python - 如何在 flasgger 中同时拥有棉花糖定义和多版本规范?
- python - TensorFlow 2.5 随机集种子不起作用,出现错误
- next.js - 将组件下一个 js 服务器端导入到另一个组件(无法读取未定义的属性“地图”)