javascript - 当客户端没有从 API 获取数据时返回一个组件?
问题描述
not
如果客户端输入确实存在的用户名,当 API 无法获取数据时,我想有选择地返回一个组件。
我从 API 获取数据如下:
async function lichessProfile(username) {
await fetch(`https://lichess.org/api/user/${username}`)
.then((res)=>res.json())
.then((json) => setData(json));
}
并将其用作
let username = JSON.stringify(data.username);
现在我在这里使用该功能:
function showDisplay() {
if(username === undefined) {
return(
<Alert variant={'danger'}>
<div>
<h2>User Does Not Exists !</h2>
</div>
</Alert>
)
}
else {
return(
<div className="profileContainer">
<Alert variant={'success'}>
<div>
<h2>User Exists !</h2>
</div>
</Alert>
</div>
)
}
}
return(
<div>
<div className='searchInput'>
<input style={{fontFamily:'Unkempt, cursive', padding:'3%',fontSize:'150%',textAlign:'center'}} type="text" onChange={getData} placeholder="search..."/>
</div>
<br/>
<div className='searchButton'>
<Button style={{fontSize:'80%',padding:'2%',backgroundColor:'grey'}} className="lichess-button" onClick={()=>lichessProfile(inputData)} >Get Profile</Button>
</div>
{showDisplay()};
{/* Here I am displaying the component */}
</div>
)
};
我现在得到了什么?一旦 API 没有获取,我就会得到unhandled error
这样的“未处理的拒绝(SyntaxError):JSON 输入的意外结束”。如果我使用 try-catch 则不会发生任何事情,但只会处理错误。
如何有选择地退回它们?
解决方案
let username = JSON.stringify(data.username)
看起来不正确。你已经有了:
.then((res)=>res.json())
.then((json) => setData(json))
所以data
fromsetData
应该已经是JSON
因为res.json()
.
除此之外,请确保您在用户名不存在时实际收到了您认为应该收到的数据。我认为如果response.json
尝试将非 JSON 数据转换为 JSON,它将中断(在您的自定义捕获中不会捕获的承诺中)。
推荐阅读
- amazon-web-services - Terraform + Route53 - 管理现有记录
- netcdf - 使用 ncrcat 连接许多 netcdf 文件时如何识别每个原始文件?
- java - 在 Recycler 视图中设置的单选复选框,用于添加和休息点
- regex - 正则表达式匹配括号之间的数据和字符串的长度
- android - API 24 上的 AlarmManager 功能,但 API 28 上没有
- java - 如何使用 jdbctemplate 从 Java 执行匿名 PL/SQL
- c# - 当单个语句中有多个 if 条件时,如何缩短此 C# 代码
- python - 实施时间序列预测以预测未来客户订单的最佳方法是什么?
- javascript - Javascript - 用另一个正则表达式替换一个正则表达式
- kubernetes - 如何配置 Kubenetes 以从静态 IP 发出外部请求