javascript - Redux Toolkit 查询和预取一些数据
问题描述
我正在使用 Redux Toolkit Query 从 Audius 服务器获取数据。该服务基于许多 IPFS 节点,最佳实践是查询在特定时刻向其发送 API 请求的性能最佳的服务器。这是 Audius API 文档建议使用的功能,以便找到正确的服务器:
const sample = (arr) => arr[Math.floor(Math.random() * arr.length)]
var host = await fetch('https://api.audius.co')
.then(r => r.json())
.then(j => j.data)
.then(d => sample(d))
我需要从此函数中获取 url 并将其输入到我使用该createApi
方法的函数中。
我将该函数包装在一个异步函数中,因为它使用了await
,但我被困在了 Promise 中。
async function getHost() {
const sample = (arr) => arr[Math.floor(Math.random() * arr.length)]
var host = await fetch('https://api.audius.co')
.then(r => r.json())
.then(j => j.data)
.then(d => sample(d))
}
我不知道如何获得这个函数的结果,我知道如何使用 React 组件,使用useState
Hook,但我不想在这里使用它,因为我认为它会减慢进程。
我试图了解如何使用它,createAsyncThunk
但我无法理解它。
其余代码如下所示:
const contentProvider = `https://discoveryprovider2.audius.co`
const audiusVersion = `/v1`
const appName = `app_name=ZION`
const baseUrl = contentProvider + audiusVersion
const section = [`/users`, `/playlists`, `/tracks`]
const search = `/search?query=`
export const audiusApi = createApi({
reducerPath: 'audiusApi',
baseQuery: fetchBaseQuery({ baseUrl: `${baseUrl}` }),
endpoints: (builder) => ({
// SEARCH USERS
// https://discovery-a.mainnet.audius.radar.tech/v1/users/search?query=Brownies&app_name=EXAMPLEAPP
searchUsers: builder.query({
query: (searchQuery) => `${section[0]}${search}${searchQuery}${appName}`
}),
.........})
}),
})
export const {
useSearchUsersQuery,
useGetUserQuery,
useGetUsersFavTracksQuery,
useGetUsersRepostsQuery,
useGetUserMostUsedTagsQuery,
useGetUserTracksQuery,
useSearchPlaylistQuery,
useGetPlaylistQuery,
useGetPlaylistTracksQuery,
useSearchTracksQuery,
useTrendingTracksQuery,
useGetTrackQuery,
useStreamTrackQuery
} = audiusApi
所以基本上我需要将async
函数 = 的结果放置到contentProvider
.
我试着简单地做
var response = getHost() // my async function
var contentProvider = response
但这并没有通过
希望有人可以帮助我解决这个问题=)。
解决方案
如果我理解你的话,我认为你会为如何使用异步函数而苦恼。
您可以轻松使用async await
.
async function getHost() {
const sample = (arr) => arr[Math.floor(Math.random() * arr.length)]
var host = await fetch('https://api.audius.co');
var json = await host.json();
var data = await json.data;
var d = await sample(data);
return d;
}
你可以把它称为
var result = await getHost();
result.
then(d => console.log(d));
推荐阅读
- jsf - 更改订单时访问 DataTable 项返回不正确的选定项
- python-3.x - ImportError:libcublas.so.9.0:没有这样的文件或目录
- html - 考虑到滚动条,如何使固定标题居中?
- java - org.postgresql.util.PSQLException:错误:函数 st_geomfromkml(unknown) 不存在
- r - 计算多列数据帧r的平均欧几里得距离
- dc.js - 带空格的交叉过滤器过滤
- javascript - 在不重复查询的情况下将一致的数据从数据库传递给用户的正确方法
- php - 升级到 10.0.8 后,Owncloud 崩溃了
- kubernetes - Kubernetes 节点永远不会扩展
- c++ - 按常数偏移折线