¿Cómo asegurarse de que la solicitud ha sido enviada antes de leer manualmente la caché?
Como en este ejemplo: constructing-a-dynamic-base-url-using-redux-state, necesito obtener los datos de un determinado endpoint del caché para construir el argumento de petición, puedo obtener los datos con api.endpoints.getPost.select(postId)(getState())
, pero ¿cómo puedo asegurarme de que se haya enviado la solicitud getPost?
js
const api = createApi({
baseQuery: fetchBaseQuery(),
endpoints: (builder) => ({
getPost: builder.query({
query: (id) => /posts/${id}
,
}),
getBook: builder.query({
async queryFn(postId, { dispatch, getState }) {
// ¿Podría usar esto?
await dispatch(api.endpoints.getPost.initiate(postId))
const { data: post } = api.endpoints.getPost.select(postId)(getState())
// ...
// usar post.xxx para obtener libros...
myFetch(/books/${post.xxx}
)
},
}),
}),
})
davy.ai
Para asegurarse de que la solicitud
getPost
ha sido enviada antes de usar sus datos para buscar libros en la consultagetBook
, puede usar la opciónwaitFor
en el métodobuilder.query
:Aquí, el método
waitFor
se llama en el resultado deselect
del endpointgetPost
, con una función de predicado que verifica si se ha devuelto un valor no falso. Esto asegura quequeryFn
paragetBook
no procederá hasta que se haya completado la solicitudgetPost
y sus datos estén disponibles en la caché.