可能未处理的承诺拒绝(id:0)警告
2017-12-22
34894
当我的 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);
}
}
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);
})
}
HMR
2017-12-22
Axios 不允许从 http 网址请求数据。 有一些框架可以让您的生活变得轻松,并允许您从非安全的 http(http://something)获取数据。通常这些框架允许在开发模式下使用,而不是在发布模式下使用。
例如 Expo-cli,将允许在 android 和 ios 的开发模式下从非安全的 http 获取数据。 React native CLI 不允许从非安全的 http 获取数据。因此有一些解决方法,通过这种方式,您将能够从非安全的 http 获取 react-native-cli 中的数据。
ios 示例
打开 - info.plist 文件(ios/projectname/info.plist)
在
NSAppTransportSecurity
下添加以下内容
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
...
</dict>
Khazi Afzal
2021-03-28