Мне потребовалось время, но я получил эту работу:
const batchUsers = async (keys, { user }) => {
const users = await user.findAll({
raw: true,
where: {
Id: {
// @ts-ignore
// eslint-disable-next-line no-undef
[op.in]: keys,
},
},
});
const gs = _.groupBy(users, 'Id');
return keys.map(k => gs[k] || []);
};
const apolloServer = new ApolloServer({
schema,
playground: true,
context: () => ({
userLoader: new DataLoader(keys => batchUsers(keys, db)),
}),
});
resolver:
user: {
myUsers: ({ Id }, args, { userLoader }) => {
return userLoader.load(Id);
},
},
детская площадка:
{users
{Id
myUsers
{Id}}
}
детская игровая площадка объяснена:
пользователи в основном выбирают всех пользователей, а затем myusers делает то же самое, вводя идентификатор из первого вызова.
Я думаю, что я выбрал здесь ужасный пример, так как я не видел никакого выигрыша в этом. Однако я увидел, что запрос превратился в:
SELECT ... FROM User WhERE ID IN(...)