Отклонение обещания (сетевая ошибка)

#android #reactjs #react-native

#Android #reactjs #react-native

Вопрос:

Я использую axios для извлечения базовых данных JSON, но продолжаю получать эту ошибку:

 Possible unhandled promise rejection (id: 0): Network Error
  

Теперь, поскольку сама эта ошибка не была «настолько» полезной, чтобы знать, что происходит, я изменил свой блок кода и использовал .catch .

Ошибка:

 Error: Network Error
    at createError (http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:82235:11)
    at XMLHttpRequest.handleError (http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:82107:8)
    at XMLHttpRequest.dispatchEvent (http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:10284:15)
    at XMLHttpRequest.setReadyState (http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:25988:6)
    at XMLHttpRequest.__didCompleteResponse (http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:25836:6)
    at http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:25930:52
    at RCTDeviceEventEmitter.emit (http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:9523:23)
    at MessageQueue.__callFunction (http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:7339:34)
    at http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:7216:8
    at guard (http://localhost:8081/index.android.bundle?platform=androidamp;dev=trueamp;hot=falseamp;minify=false:7155:1)
  

Код:

 componentWillMount() {
    axios.get('http://rallycoding.herokuapp.com/api/music_albums')
        .then((response) => {
            if(!response.ok){
                console.log(response.statusText);
            }
            console.log((response))
        }).then((response) => {
            console.log("ok")
        }).catch((err) => console.log(err))
}
  

Заранее спасибо.

Ответ №1:

Вам необходимо вернуть ответ внутри вашего оператора first then, иначе цепочка не будет работать.

 componentWillMount() {
    axios.get('http://rallycoding.herokuapp.com/api/music_albums')
        .then((response) => {
            if(!response.ok){
                console.log(response.statusText);
            }
            console.log((response))
            
            // return response
            return response;
        }).then((response) => {
            console.log("ok")
        }).catch((err) => console.log(err))
}  

Надеюсь, это поможет.

Ответ №2:

Если кто-то еще сталкивается с этой проблемой, мне удалось ее исправить, добавив .done(); в конце цепочки обещаний.

 componentDidMount() {
    axios.get('https://rallycoding.herokuapp.com/api/music_albums')
    .then((response) => console.log(response))
    .done();
}