javascript - API Query fetch 有效,但不返回结果
问题描述
我正在尝试从 API useEffect 中获取值:
useEffect(async() => {
try {
const result = await getToken(urlSuffix);
logger.log('returned')
setToken(result);
} catch (error) {
logger.debug('ERROR: ', error);
throw error;
}
}, [urlSuffix]);
问题是,该函数永远不会返回令牌,但获取部分可以正常工作(我正在记录令牌)。这是api获取:
export const getToken = async (
urlSuffix
) => {
try {
const url = `https://api_url/api/v1/asset/${urlSuffix}`;
const data = await fetch(url, {
headers: {
'Accept': 'application/json',
'X-Api-Key': API_KEY,
},
method: 'get',
timeout: 5000, // 5 secs
});
const token = data?.data?.collection?.token;
logger.debug('TOKEN: ', token);
return token;
} catch (error) {
logger.debug('TOKEN FETCH ERROR');
}
};
获取时记录正确的logger.debug
令牌,但从logger.log
不useEffect
记录结果已返回。什么是阻止getToken
返回token
?
解决方案
fetch()
返回一个用没有属性的Response对象解析的Promise data
。我认为你想要的getToken()
功能是这个......
export const getToken = async (urlSuffix) => {
const url = `https://api_url/api/v1/asset/${urlSuffix}`;
// FYI - fetch does not support timeouts
const res = await fetch(url, {
headers: {
'Accept': 'application/json',
'X-Api-Key': API_KEY,
},
method: 'GET',
});
if (!res.ok) {
logger.debug('TOKEN FETCH ERROR');
throw new Error(`${res.status}: ${await res.text()}`)
}
const data = await res.json() // parse the response stream as JSON
const token = data.collection.token;
logger.debug('TOKEN: ', token);
return token;
}
您也不应该将异步函数传递给它,useEffect
因为它会破坏清理过程
useEffect(() => {
getToken(urlSuffix).then(setToken)
}, [ urlSuffix ]);
推荐阅读
- sparql - 通过端点的 Fuseki 2 事务
- reactjs - React 和 TypeScript,如何正确定义我的组件类的直接属性?
- java - 如何同时响应式地写入和读取文件
- python - 在多个虚拟环境中运行单个 IPython 内核
- postgresql - 在postgis中按中心点、半径、内角和方位角绘制扇区
- plc - 比较 2 个字符数组并在 S7 1500 (PLC) 上找到匹配项
- google-chrome - chrome webstore - 超过3个月的扩展统计
- php - WooCommerce:ACF 价值没有通过产品类别拉动
- java - Liberty Core:未找到 Spring Boot 上下文根
- java - 使用模拟测试的空服务响应