React-Native 那些坑之 NetInfo.getConnectionInfo()

關鍵詞: React-Native iOS?NetInfo ?getConnectionInfo()


最近后臺增加了一個新需求, 需要增加一個網(wǎng)絡狀態(tài)加進header里面方便數(shù)據(jù)統(tǒng)計, 很快就查到RN 有個NetInfo的類專門處理這個需求的, 本來以為很簡單就一下子完事的, 沒想到還是踩了一個非常隱蔽的坑


由于混雜著其他需求一起發(fā)了個測試版本,導致這個問題debug了一個上午才發(fā)現(xiàn)


問題在于?await getConnectionInfo() 如果在短時間內(nèi)調(diào)用多次, 會導致一直在等待回調(diào),導致請求一直無法發(fā)送出去, (為啥會短時間內(nèi)調(diào)用多次?這又涉及到axios的另一個坑了,以后再研究), 這個問題只有iOS才發(fā)生, android那邊一點問題都沒有


類似的情況可參考github上面的這個issue:

? ??????https://github.com/facebook/react-native/issues/19039


解決辦法很簡單,自己封裝一下方法就可以了,代碼如下:


async function getConnectionInfo() {

? if (Platform.OS === 'ios') {

? ? return new Promise((resolve, reject) => {

? ? ? const connectionHandler = connectionInfo => {

? ? ? ? NetInfo.removeEventListener('connectionChange', connectionHandler)

? ? ? ? resolve(connectionInfo)

? ? ? }

? ? ? NetInfo.addEventListener('connectionChange', connectionHandler)

? ? })

? }

? return NetInfo.getConnectionInfo()

}

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容