我最近发现,因为我的一些屏蔽规则中有异步调用,这导致我的数据加载器批处理函数被多次调用,而它们本应只被调用一次,这给我留下了N+1的问题。
我相信这是由于
dataloader
库要求所有批处理函数调用都发生在同一事件循环“tick”期间(
source
),而在我的屏蔽规则中进行的异步调用阻止了这种情况的发生。
这是
useFactory
传递给的函数
GraphQLModule
在我的
app
:
useFactory(dataloaderService: DataloaderService, usersService: UsersService) {
return {
context: async ({ req }: { req: Request }) => {
const loaders = dataloaderService.getLoaders();
const services = { usersService };
return { loaders, services };
},
transformSchema: (schema: GraphQLSchema) => {
schema = applyMiddleware(schema, shieldPermissions);
return schema;
},
};
},
有没有办法同时使用数据加载器和GraphQLShield这样的授权库?我当前的配置有什么问题可能导致这种情况吗?