>source

문제 설명 ::

저는 반응 네이티브 응용 프로그램을 만들고 있습니다. 서버에 API 데이터가 너무 많습니다. 페이지에서이 API에 처음으로 도달하면 제대로 작동합니다. 그러나 동일한 페이지에서 API를 두 번 누르면 앱이 닫힙니다. Firebase에는 오류/충돌 로그가 없습니다.

서버에서 API를 실행하기 위해 axios 를 사용하고 있습니다.

코드 ::

componentDidMount() {
    this.getSingleUser();
}
 async getSingleUser() {
   NetInfo.isConnected.fetch().then(isConnected => {
       axios.get(`${api_URL}`)
           .then(response => {
               Toast.show("2");
               this.checkApiResponse(response.data.response);
       })
       .catch(error => {
           Toast.show(JSON.stringify(error));
       });
   });
}

checkApiResponse(response) {
   this.setState({ loading: false, refreshing: false });
   console.log(response);
}

오류 로그 ::

--------- beginning of system
2019-03-20 15:06:37.846 555-555/? E/lowmemorykiller: Error writing /proc/23858/oom_score_adj; errno=22
2019-03-20 15:06:37.846 555-555/? E/lowmemorykiller: Error writing /proc/23825/oom_score_adj; errno=22
2019-03-20 15:06:37.847 555-555/? E/lowmemorykiller: Error writing /proc/22442/oom_score_adj; errno=22
2019-03-20 15:06:37.856 555-555/? E/lowmemorykiller: Error writing /proc/23825/oom_score_adj; errno=22
2019-03-20 15:06:37.885 555-555/? E/lowmemorykiller: Error writing /proc/22442/oom_score_adj; errno=22
2019-03-20 15:06:37.924 555-555/? E/lowmemorykiller: Error writing /proc/23825/oom_score_adj; errno=22
2019-03-20 15:06:37.924 555-555/? E/lowmemorykiller: Error writing /proc/22442/oom_score_adj; errno=22
2019-03-20 15:06:37.973 555-555/? E/lowmemorykiller: Error writing /proc/23825/oom_score_adj; errno=22
2019-03-20 15:06:37.987 555-555/? E/lowmemorykiller: Error opening /proc/22442/oom_score_adj; errno=2
2019-03-20 15:06:37.989 555-555/? E/lowmemorykiller: Error writing /proc/23107/oom_score_adj; errno=22
2019-03-20 15:06:37.989 555-555/? E/lowmemorykiller: Error writing /proc/22296/oom_score_adj; errno=22
2019-03-20 15:06:37.989 555-555/? E/lowmemorykiller: Error writing /proc/24137/oom_score_adj; errno=22
2019-03-20 15:06:37.990 555-555/? E/lowmemorykiller: Error writing /proc/23642/oom_score_adj; errno=22
2019-03-20 15:06:37.990 555-555/? E/lowmemorykiller: Error opening /proc/23825/oom_score_adj; errno=2
2019-03-20 15:06:38.009 555-555/? E/lowmemorykiller: Error writing /proc/23107/oom_score_adj; errno=22
2019-03-20 15:06:38.009 555-555/? E/lowmemorykiller: Error writing /proc/22296/oom_score_adj; errno=22
2019-03-20 15:06:38.010 555-555/? E/lowmemorykiller: Error writing /proc/23642/oom_score_adj; errno=22
2019-03-20 15:06:38.020 555-555/? E/lowmemorykiller: Error writing /proc/23107/oom_score_adj; errno=22
2019-03-20 15:06:38.020 555-555/? E/lowmemorykiller: Error writing /proc/23579/oom_score_adj; errno=22
2019-03-20 15:06:38.021 555-555/? E/lowmemorykiller: Error writing /proc/24137/oom_score_adj; errno=22
2019-03-20 15:06:38.021 555-555/? E/lowmemorykiller: Error writing /proc/23642/oom_score_adj; errno=22
2019-03-20 15:06:38.045 555-555/? E/lowmemorykiller: Error opening /proc/23579/oom_score_adj; errno=2
2019-03-20 15:06:38.723 555-555/? E/lowmemorykiller: Error writing /proc/23148/oom_score_adj; errno=22
2019-03-20 15:06:38.726 555-555/? E/lowmemorykiller: Error writing /proc/19742/oom_score_adj; errno=22
2019-03-20 15:06:38.731 555-555/? E/lowmemorykiller: Error writing /proc/23148/oom_score_adj; errno=22
2019-03-20 15:06:38.760 1588-1800/? E/ConnectivityService: RemoteException caught trying to send a callback msg for NetworkRequest [ id=632, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED] ]
2019-03-20 15:06:38.765 555-555/? E/lowmemorykiller: Error writing /proc/22716/oom_score_adj; errno=22
2019-03-20 15:06:38.786 743-743/? E/cnss-daemon: Stale or unreachable neighbors, ndm state: 4
2019-03-20 15:06:38.817 1588-1800/? E/ConnectivityService: RemoteException caught trying to send a callback msg for NetworkRequest [ id=627, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED] ]
2019-03-20 15:06:38.850 1588-1779/? E/InputDispatcher: channel '347cfde com.miui.home/com.miui.home.launcher.Launcher (server)' ~ Channel is unrecoverably broken and will be disposed!
2019-03-20 15:06:39.579 24915-24915/? E/miuisdk: got ModuleLoadException when load modules: no such module found: com.miui.personalassistant
2019-03-20 15:06:39.820 743-743/? E/cnss-daemon: Stale or unreachable neighbors, ndm state: 4
2019-03-20 15:06:40.366 24931-23888/? A/google-breakpad: Microdump skipped (uninteresting)

API 데이터가 너무 작은 경우 때때로 제대로 작동합니다. API 데이터가 너무 클 때 문제가됩니다. 솔루션이있는 사람이 있다면 제안 해주세요.

  • 답변 # 1

    API에서 응답을 받기 전에 그것이 함수를 호출하기 때문이라고 생각합니다. 큰 크기에 대해 언급했듯이 작동하지 않고 await 를 볼 수 없기 때문에 함수를 호출합니다.  귀하의 코드에서. await 를 추가하십시오  당신의 axios 에  확인하십시오. 이것이 도움이 되길 바랍니다.

  • 답변 # 2

    @Maneesh가 말했듯이 응답을 기다리지 않고 함수가 여러 번 호출되어 발생할 수 있습니다. 이미 Axios에 시간 초과를 추가했다고 언급했지만 Axios에 시간 초과를 추가해도 작동하지 않는 알려진 문제가 있습니다.(과거에이 문제가 발생했습니다)

    요청에 타임 아웃을 설정하는 해결 방법이 있습니다- cancelToken 를 사용하여 요청을 수동으로 중단하십시오  그리고 일반적인 자바 스크립트 setTimeout()

    function setRequestTimeout(source, timeout) {
      setTimeout(() => {
        source.cancel('timeout')
      }, timeout);
    }
    function getRequest() {
      return new Promise((resolve, reject) => {
        const timeout = 10000
        let source = axios.CancelToken.source()
        setRequestTimeout(source, timeout)
        try {
          const response = await axios.get('/your-address/', {
            timeout: timeout,
            headers: {
              'Content-type': 'application/json'
            },
            cancelToken: source.token
          })
          resolve(response)
        } catch (error) {
          reject(error)
        }
      })
    }
    
    

    이것은 과거에 저에게 효과적이었습니다. 내 솔루션은 이전에 언급 한이 문제에서 발견 된 의견에서 파생되었습니다. 이것이 도움이되기를 바랍니다!

관련 자료

  • 이전 bash - 더 나은 grep 파일 검색
  • 다음 ffmpeg 움직이는 텍스트를 부드럽게 만드는 방법?