gpt4 book ai didi

javascript - 如何使用数据加载器?

转载 作者:行者123 更新时间:2023-12-03 22:18:25 24 4
gpt4 key购买 nike

我想弄清楚这一点。

我想从我的数据库中获取所有用户,缓存它们
然后在提出新请求时,我想获得那些我已经缓存的 + 已经创建的新请求。

迄今为止:

const batchUsers = async ({ user }) => {
const users = await user.findAll({});

return users;
};

const apolloServer = new ApolloServer({
schema,
playground: true,
context: {
userLoader: new DataLoader(() => batchUsers(db)),// not sending keys since Im after all users
},
});

我的解析器:
    users: async (obj, args, context, info) => {
return context.userLoader.load();
}

load 方法需要一个参数,但在这种情况下,我不想拥有一个特定的用户,我想要所有这些用户。

我不明白如何实现这一点有人可以解释一下。

最佳答案

如果您只是尝试加载所有记录,那么开始使用 DataLoader 就没有什么意义了。 DataLoader 背后的目的是将多个调用(如 load(7)load(22))批处理为单个调用,然后针对您的数据源执行。如果你需要获取所有用户,那么你应该直接调用 user.findAll

此外,如果您最终使用了 DataLoader,请确保您传入的是一个函数,而不是一个对象作为您的上下文。该函数将在每个请求上运行,这将确保您使用的是 DataLoader 的新实例,而不是具有陈旧缓存的实例。

context: () => ({
userLoader: new DataLoader(async (ids) => {
const users = await User.findAll({
where: { id: ids }
})

// Note that we need to map over the original ids instead of
// just returning the results of User.findAll because the
// length of the returned array needs to match the length of the ids
return ids.map(id => users.find(user => user.id === id) || null)
}),
}),

请注意,如果您希望 null 拒绝,您还可以在数组中返回一个错误实例而不是 load

关于javascript - 如何使用数据加载器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61256372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com