#javascript #api #asynchronous #xmlhttprequest
#javascript #API #асинхронный #xmlhttprequest
Вопрос:
Я пытаюсь извлечь какой-то объект, но проблема в том, что сначала мне нужно проверить, есть ли какой-либо объект на конечной точке кэша, если нет, я должен выполнить обычную выборку из обычной конечной точки.
До сих пор мне удавалось выполнять выборку только из:
- Нормальная конечная точка и установить все в состояние,
- Кэшируйте конечную точку и установите все в состояние
Любые попытки смешать оба метода заканчивались неудачей: (
Как я могу смешать эти два метода?
const getCache = async () => {
try {
const apiCall = await fetch(fetchCacheEndpoint)
const data = await apiCall.json()
return data
} catch (e) {
console.log(e);
}
}
const pageOne = getCache().then((result) => {
const convertedOBj = result.doSomeSeriousStuff()
this.setState({
desiredObj: convertedOBj
})
})
Я ожидал сделать что-то вроде этого
const getCache = async () => {
try {
const apiCall = await fetch(fetchCacheEndpoint)
const data = await apiCall.json()
return data
} catch (e) {
console.log(e);
}
}
let convertedOBj
const pageOne = getCache().then((result) => {
if ((result === undefined) || (!result) || (result amp;amp; !result.length > 0)) {
const makeRegularFetch = async () => {
const regularFetch = await fetch(regularEndPoint)
const data = await regularFetch.json()
}
const pageTwo = makeRegularFetch ().then((result) => {
convertedOBj = result.doSomeSeriousStuff()
this.setState({
desiredObj: convertedOBj
})
})
} else {
convertedOBj = result.doSomeSeriousStuff()
this.setState({
desiredObj: convertedOBj
})
}
})
После сбоя первой выборки (getCache) выполняется другая выборка (makeRegularFetch) для второй конечной точки, что всегда нормально, но только в том случае, когда first (getCache) возвращает пустой объект или просто какую-либо ошибку
Как я могу справиться с такого рода действиями?
Ответ №1:
Из того, что я вижу во второй части вашего кода, вы никогда не выполняете свою pageOne
функцию.
Попробуйте pageOne()
после вашего определения.
Однако я сделал скрипку на stackblitz для вашего случая: https://stackblitz.com/edit/js-eufm8h
Если вы чего-то не понимаете, не стесняйтесь спрашивать.