Проблема в том, что каждый раз, когда вы звоните testDataLoader
, вы создаете новый экземпляр DataLoader.Вы должны создать один экземпляр DataLoader для каждого запроса (для каждого загружаемого ресурса).Таким образом, каждый раз, когда вы вызываете load
, вы взаимодействуете с одним и тем же кэшем.
Вы могли бы сделать что-то вроде:
const dummy = new DataLoader(...);
async function testDataLoader(accountNumber) {
return dummy.load(accountNumber)
}
Но это сохранитсяDataLoader между запросами, что вы не хотите делать.Что вы должны сделать, это создать экземпляр DataLoader как часть вашего контекста, который воссоздается каждый раз, когда выполняется запрос.
const context = async ({ req }) => {
return {
testLoader = new DataLoader(...),
};
},
const server = new ApolloServer({
...
context,
})
Затем просто вызовите загрузчик прямо внутри вашего преобразователя:
query2: async (parent, args, context) => {
const data = await context.testLoader.load(["12121"]);
...
}