[英]How to setup dataloaders for GraphQL in graphql-go?
我正在为 Golang 使用 gqlgen package 并且我正在尝试实现数据加载器。 这是我正在使用的数据加载器: https://github.com/graph-gophers/dataloader
我做了教程中的所有操作,但我无法将所有键作为键片加载。 在 Node.js 如果我做类似的事情
loader.load(1)
loader.load(3)
loader.load(3)
在批次 function 中,对于键,我将收到一个 [1,3] 数组。 然而,在 Golang 中,我得到了完全不同的东西。
这是我的现场解析器
func (r *newsResolver) CreatedBy(ctx context.Context, obj *models.News) (*models.User, error) {
loader := NewDataLoader()
thunk := loader.Load(context.TODO(), dataloader.StringKey(obj.CreatedById)) // StringKey is a convenience method that make wraps string to implement `Key` interface
result, err := thunk()
if err != nil {
// handle data error
}
log.Printf("value: %#v", result)
return nil, nil
}
和一个数据加载器 function
func NewDataLoader() *dataloader.Loader {
batchFn := func(ctx context.Context, keys dataloader.Keys) []*dataloader.Result {
var results []*dataloader.Result
fmt.Println(keys)
results = append(results, &dataloader.Result{Data: keys})
return results
}
loader := dataloader.NewBatchedLoader(batchFn)
return loader
}
但是,当我打印密钥时,我得到了一批 function,每次我都得到了单个输入的一部分。 就像是
[2]
[1]
[3]
[1]
[3]
我想我应该得到类似的东西: [2, 1, 3]
每次使用它时,您都在创建一个新的数据加载器( loader:= NewDataLoader()
)。 这使它变得无用。
您应该对整个请求使用相同的数据加载器。 例如,将其存储在请求上下文中。 我发现了一些教程:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.