React Native调用NetInfo检测网络返回Promise而非布尔值如何解决
问题根因
所有标记async的函数默认返回值都是Promise对象,你直接同步调用connectionStatus()没有等待异步逻辑执行完成,所以拿到的不是最终的布尔值,而是pending状态的Promise实例。
此外你编写的connectionStatus函数内部仅执行了await操作,没有把结果return出来,就算等待执行完成也拿不到网络状态值,属于逻辑遗漏。
修复方案
方案1:支持顶层await场景直接调用
如果你的运行环境支持ES Module顶层await特性(现代React Native版本默认支持),直接修改代码如下:
import checkNetwork from '你封装checkNetwork的文件路径'; // 补全return逻辑 const connectionStatus = async () => { return await checkNetwork.isNetworkAvailable(); }; // 调用时加await等待异步结果返回 const isConnected = await connectionStatus(); console.log('status of network >>', isConnected);
也可以简化直接调用封装好的方法:
const isConnected = await checkNetwork.isNetworkAvailable(); console.log('status of network >>', isConnected);
方案2:Redux异步场景调用
Redux reducer是纯函数,不能直接在reducer内部执行异步逻辑,需要将网络判断放到异步Action(比如Redux Thunk、Saga等异步中间件逻辑)中执行:
// Redux Thunk 示例代码 export const yourBusinessAction = () => async (dispatch) => { const isConnected = await checkNetwork.isNetworkAvailable(); console.log('status of network >>', isConnected); if (!isConnected) { // 无网时的逻辑处理,例如抛出提示、更新store中网络状态 dispatch({ type: 'UPDATE_NETWORK_STATUS', payload: false }); return; } // 有网时正常执行业务请求逻辑 // ...你的其他业务代码 };
内容的提问来源于stack exchange,提问作者user17320400
相关产品推荐
相关产品推荐

