问题描述
假设我有类似的类型
type Node {
parentNode: Node
childNodes: [Node!]!
friendNode: Node
}
在 NodeType 中,我使用 DataLoader 加载子节点
Field<NonNullGraphType<ListGraphType<NonNullGraphType<NodeType>>>,IEnumerable<Node>>()
.Name("childNodes")
.ResolveAsync(ctx =>
{
var nodesLoaded = accessor.Context.GetorAddCollectionBatchLoader<int,Node>("GetNodesByParentIds",nodeRepo.GetNodesByParentIdsAsync);
return nodesLoaded.LoadAsync(ctx.source.Id);
});
稍后我想加载父节点或朋友节点。然而,有可能在某些“加载子节点”操作中更早地加载了相同的节点
Field<NodeType,Node>()
.Name("parentNode") //or friendNode
.ResolveAsync(ctx =>
{
var nodeLoaded = accessor.Context.GetorAddBatchLoader<int,Node>("GetNodesByIds",nodeRepo.GetNodesByIdsAsync);
return nodeLoaded.LoadAsync(ctx.source.ParentNodeId); //or FriendNodeId
});
是否支持使用解析“GetNodesByParentId”时获得的值预填充“GetNodesByIds”数据加载器的方法,但仍然在未加载节点时调用存储库方法?
我发现的最佳解决方案是创建自定义的“假”IDataLoader 来存储加载的节点和
- 在解析 'GetNodesByParentIds' 后填写此内容(在 .Then() 中)
- 在调用“GetNodesByIds”之前,检查带有 id 的节点是否是这个“假”数据加载器
- 如果节点不存在,则使用其他加载器 - 'GetNodesByIds'
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)