Возможно, вы могли бы переписать getData()
, используя async/await
, чтобы лучше захватить все возможные пути кода для необнаруженных ошибок / обещаний:
/* Define async function */
getData = async () => {
/* This try block will encapsulate the fetch logic, and capture all errors
that can be thrown */
try {
const { toDate, fromDate } = this.state
var url = 'https://www.fenonline.dk/SYS_Backend/api/car/'
url += fromDate + "/"
url += toDate
/* Use await instead of promise.then */
const response = await fetch(url)
/* The json() function is async, so use await */
const json = await response.json()
/* If response failed, return error data in same format as in your
Promise.reject() */
if(!response.ok) {
throw { status: response.status, fullError: json }
}
/* Update data with json */
this.setState({ data : json })
}
catch(error) {
/* Log error to console */
console.error(error)
}
}
Также обратите внимание, что response.json()
- это асинхронный метод , что означает, что вам нужно будет позвонить через await
, как показано выше (или как обещание; res.json().then(...)
).Это означает, что выполнение:
return Promise.reject({ status: res.status, fullError: res.json() })
, как показано в вашем коде, будет означать, что значение fullError
является Promise
объектом, а не ожидаемыми данными JSON