es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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})
},
}),
}),
})

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que la solicitud getPost ha sido enviada antes de usar sus datos para buscar libros en la consulta getBook, puede usar la opción waitFor en el método builder.query:

    const api = createApi({
       baseQuery: fetchBaseQuery(),
       endpoints: (builder) => ({
         getPost: builder.query({
           query: (id) => `/posts/${id}`,
         }),
         getBook: builder.query({
           async queryFn(postId, { dispatch, getState }) {
             await dispatch(api.endpoints.getPost.initiate(postId))
    
             // espera a que se complete la solicitud `getPost`
             await api.endpoints.getPost.select(postId).waitFor((x) => !!x)
    
             const { data: post } = api.endpoints.getPost.select(postId)(getState())
             // ...
             // usa post.xxx para buscar libros...
             myFetch(`/books/${post.xxx}`)
           },
         }),
       }),
    })
    

    Aquí, el método waitFor se llama en el resultado de select del endpoint getPost, con una función de predicado que verifica si se ha devuelto un valor no falso. Esto asegura que queryFn para getBook no procederá hasta que se haya completado la solicitud getPost y sus datos estén disponibles en la caché.

Comments are closed.