關鍵詞: 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()
}