React Native中如何获取Sensitive Info Keychain存储的敏感信息值?
问题分析与解决
核心问题
你直接调用getToken()拿到的是Promise对象(就是你看到的{"_U": 0, "_V": 0, "_W": null, "_X": null}),因为async函数默认返回Promise,必须用await等待它完成才能拿到实际的token值。而函数内部能成功,就是因为你用了await getToken()。
外部获取并使用token的方法
异步操作没法直接同步拿到结果,得用异步方式处理,给你几种实用方案:
1. 立即执行异步函数(IIFE)
如果是在普通JS文件里,用立即执行的异步函数包裹逻辑:
// 直接在外部执行 (async () => { const token = await getToken(); console.log(token); // 这里能拿到真实的token值 // 把需要用token的代码写在这里,比如调用API、赋值给变量等 })();
2. React组件中用useEffect(结合你的场景)
看你代码里有setIsLike,应该是React组件。可以用useState存token,useEffect异步获取,等token加载完成后再执行依赖它的逻辑:
import { useEffect, useState } from 'react'; function YourComponent() { const [token, setToken] = useState(null); const [isLike, setIsLike] = useState(false); // 组件挂载时获取token useEffect(() => { const fetchToken = async () => { const storedToken = await getToken(); setToken(storedToken); }; fetchToken(); }, []); // 当token有值时,执行点赞检查逻辑 useEffect(() => { if (!token) return; // token没加载完就不执行 const checkIsLiked = async () => { try { const res = await axios.get(url, { headers: { 'Content-Type': 'application/json', Authorization: `token ${JSON.parse(token)}`, }, }); setIsLike(res.data); } catch (error) { console.error(error); } }; checkIsLiked(); }, [token]); return <div>{isLike ? '已点赞' : '未点赞'}</div>; }
3. 优化你的checkIsLiked函数
你原来的函数里混用了await和.then,可以改成全await写法,更清晰:
const checkIsLiked = async () => { try { const token = await getToken(); const res = await axios.get(url, { headers: { 'Content-Type': 'application/json', Authorization: `token ${JSON.parse(token)}`, }, }); setIsLike(res.data); } catch (error) { console.error(error); } };
内容的提问来源于stack exchange,提问作者jdez
相关产品推荐
相关产品推荐

