在获取过程中丢失连接会导致React-Native应用程序

时间:2016-12-28 19:40:56

标签: react-native fetch

如果在我的react-native应用程序中获取期间丢失了互联网连接,我会收到Network request failed并且应用程序崩溃。

  updateClientData() {

    var cachedData = null;

    AsyncStorage.getItem('cachedData').then((cachedDataString) => {  
       cachedData = JSON.parse(cachedDataString);     
    })

    .done(() => {

      if (cachedData) {
        const base64 = require('base-64');
        return fetch('https://...data.json', {
          method: 'get',
          headers: {
            'Authorization': 'Basic '+base64.encode("..."),
          }
        })

        .then( (response) => {
          // never called:
          return response.json();
        })

        .catch( (error) => {
          //Shouldn't this catch network errors? It never gets called.
          console.log('caught network error');
        })

        .then( (responseJSON) => {
            //do something with the JSON
        })

      } 

    });

  },

我希望能够优雅地处理这个问题,而不是让它崩溃。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

出于某种原因,将AsyncStorage调用移出此函数使其正常工作。直到我得到了fetch的结果,我才真正需要它,所以我把它移动了。

现在可以使用:

 updateClientData() {    

      const base64 = require('base-64');

      return fetch(clientListURL, {
        method: 'get',
        headers: {
          'Authorization': 'Basic '+base64.encode("..."),
        }
      })

      .then( (response) => {
        return response.json();
      })

      .catch( (error) => {
        console.log('error...')
      })

      .then( (responseJSON) => {
        // now do something with the JSON and the data from Async Storage
    }

  },