Предупреждение о возможном отклонении необработанного обещания (id:0)

Я получаю следующее предупреждающее сообщение, когда мой элемент 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);
        }
    }

person I'm not human    schedule 22.12.2017    source источник
comment
try/catch не работает с промисами, если вы не используете await.   -  person Bergi    schedule 22.12.2017


Ответы (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);
  })
}
person HMR    schedule 22.12.2017
comment
Я получаю сообщение об ошибке =›, и когда я реализую его следующим образом, .catch(console.log('empty')) он распечатывает, но продолжает выдавать мне одно и то же предупреждающее сообщение - person I'm not human; 22.12.2017

Axios не позволит запрашивать данные с URL-адресов http. есть несколько фреймворков, которые сделают вашу жизнь проще и позволят вам получать данные с незащищенного http(http://something). обычно эти рамки позволяют работать в режиме разработки, а не в режиме выпуска.

Пример Expo-cli позволит получать данные с незащищенного http в режиме разработки как для Android, так и для ios. Собственный интерфейс командной строки React не позволит получать данные с незащищенного http. так что есть некоторая работа, благодаря которой вы сможете получать данные в react-native-cli из незащищенного http.

пример для ios

открыть - файл info.plist (ios/projectname/info.plist)

добавить следующее под NSAppTransportSecurity

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        ...
    </dict>

person Khazi Afzal    schedule 28.03.2021