繁体   English   中英

如何在 graphql-go 中为 GraphQL 设置数据加载器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM