在手动读取缓存之前如何确保请求已经发送?

How to ensure that the request has been sent before manually reading the cache?

像这个例子:constructing-a-dynamic-base-url-using-redux-state,我需要从缓存中获取某个端点的数据来构建fetch arg,我可以通过api.endpoints.getPost.select(postId)(getState())获取数据,但是我如何确保getPost 请求已发送?

const api = createApi({
  baseQuery: fetchBaseQuery(),
  endpoints: (builder) => ({
    getPost: builder.query({
      query: (id) => `/posts/${id}`,
    }),
    getBook: builder.query({
      async queryFn(postId, { dispatch, getState }) {
        // could I use this?
        await dispatch(api.endpoints.getPost.initiate(postId))
        const { data: post } = api.endpoints.getPost.select(postId)(getState())
        // ...
        // use post.xxx to fetch books...
        myFetch(`/books/${post.xxx}`)
      },
    }),
  }),
})

在当前的 RTK 1.7 测试版中,您可以 const result = await dispatch(api.endpoints.getPost.initiate(postId)).unwrap()

但是你在这里做的事情通常看起来很危险。没有任何机制可以在 getPost returns 之后重新 运行 getBook 一个不同的结果。这样事情可能会不同步。

依赖查询最好在具有两个 useQuery 钩子调用的自定义钩子中处理,其中第二个钩子调用从第一次调用中获取部分结果作为参数。