获取Session ID并调用API时遭遇‘Unexpected reserved word 'await'’错误的解决方案咨询
解决‘Unexpected reserved word 'await'’错误的方案
看起来你遇到的问题核心是没有在正确的位置添加async关键字——虽然你提到已经尝试加了,但大概率是加错地方啦。让我帮你梳理清楚:
await关键字只能在标记为async的函数内部使用,而你的onRefresh是React.useCallback的回调函数,这个回调函数本身需要被声明为async,因为里面包含了多处await调用(比如AsyncStorage.getItem和fetch)。
修正后的完整代码
const onRefresh = React.useCallback(async () => { // 关键:在这里添加async const deviceId = await AsyncStorage.getItem('@device_ID') const sessionId = await AsyncStorage.getItem('@session_Id') console.log('device ID: ',deviceId, 'session ID: ', sessionId) setRefreshing(true); // wait(5000).then(() => setRefreshing(false)); try{ let ServiceTicketData = await fetch(`${API_URL}/v1/serviceTicket`, { method: 'GET', headers: { Accept: 'application/json', 'apiKey': 'asdkhjfgsed34e', 'deviceId': deviceId, 'sessionId': sessionId }, }); let STData = await ServiceTicketData.json(); console.log(STData); setRefreshing(false) } catch (error) { console.error(error); // 改用console.error更便于区分错误信息 setRefreshing(false); // 重要:出错时也要重置刷新状态,避免一直显示加载中 } }, [refreshing]);
额外注意事项
- 确认
async是直接加在useCallback的箭头函数前面,也就是async () => {...}这个位置,这是解决语法错误的核心。 - 错误捕获块里一定要加上
setRefreshing(false),否则如果API调用失败,下拉刷新的状态会一直卡在“刷新中”,影响用户体验。 - 如果你使用的是较新版本的React Native,
AsyncStorage已经从核心库移到了@react-native-async-storage/async-storage包,记得确认是否正确安装并导入了这个依赖。
内容的提问来源于stack exchange,提问作者Ryan Fonseka
相关产品推荐
相关产品推荐

