当AsyncStorage项目为空时,我收到以下警告消息"可能未处理的承诺拒绝(id:0)" 所以我的问题是:我如何处理承诺拒绝?
我的代码:
componentDidMount() {
try {
// This warning only appears when 'connections' item is empty
AsyncStorage.getItem('connections').then((token) => {
token = JSON.parse(token);
const getSectionData = (dataBlob, sectionId) => dataBlob[sectionId];
const getRowData = (dataBlob, sectionId, rowId) => dataBlob[`${rowId}`];
const ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2,
sectionHeaderHasChanged: (s1, s2) => s1 !== s2,
getSectionData,
getRowData,
});
const {dataBlob, sectionIds, rowIds} = this.formatData(token);
this.setState({
dataSource: ds.cloneWithRowsAndSections(dataBlob, sectionIds, rowIds),
});
});
}catch(error) {
console.log(error);
}
}
答案 0 :(得分:2)
你需要抓住承诺的拒绝:
componentDidMount() {
// This warning only appears when 'connections' item is empty
return AsyncStorage.getItem('connections').then((token) => {
token = JSON.parse(token);
const getSectionData = (dataBlob, sectionId) => dataBlob[sectionId];
const getRowData = (dataBlob, sectionId, rowId) => dataBlob[`${rowId}`];
const ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2,
sectionHeaderHasChanged: (s1, s2) => s1 !== s2,
getSectionData,
getRowData,
});
const { dataBlob, sectionIds, rowIds } = this.formatData(token);
this.setState({
dataSource: ds.cloneWithRowsAndSections(dataBlob, sectionIds, rowIds),
});
}).catch(error => {
console.log(error);
})
}
答案 1 :(得分:0)
Axios 不允许从 http url 请求数据。 有一些框架可以让您的生活变得轻松,并允许您从非安全的 http(http://something) 获取数据。通常这些框架允许在开发模式下而不是在发布模式下。
Example Expo-cli,将允许在 android 和 ios 的开发模式下从非安全 http 获取数据。 React Native CLI 将不允许从非安全 http 获取数据。所以有一些解决方法,这样你就可以从非安全 http 获取 react-native-cli 中的数据。
打开 - info.plist 文件(ios/projectname/info.plist)
在NSAppTransportSecurity
下添加以下内容
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
...
</dict>