【问题标题】:GraphQL Dataloader - Global variable with load() functionGraphQL Dataloader - 带有 load() 函数的全局变量
【发布时间】:2019-10-29 15:27:01
【问题描述】:

我正在使用带有数据加载器的 graphql。我在一个类型中有这个调用。我的问题是,当我调用“categoryPhotoLoader”时,我想将 user_id 作为每个 _id 的全局参数传递。这可能吗,或者我必须创建一个 concat (${_id}_${user_id}) 并在数据加载器中获取密钥的第一个 user_id? (拆分字符串,获取第一个id的user_id部分)

async photoS3({_id, user_id}, _, {categoryPhotoLoader}) {
    return categoryPhotoLoader.load(`${_id}_${user_id}`);
}

我想要这样的东西

async photoS3({_id, user_id}, _, {categoryPhotoLoader}) {
    return categoryPhotoLoader.load(_id, {user_id: user_id});
}

【问题讨论】:

  • 你只是问如何使用多个值作为键?目前尚不清楚“全局参数”是什么或全局变量与您描述的用例有什么关系。
  • 认为我想要特定用户的所有 id。我可以传递 id.... 但我也想传递 user_id。

标签: graphql


【解决方案1】:

Dataloader 键不必是字符串,它们可以是数组、对象或其他数据类型。所以你可以这样做:

categoryPhotoLoader.load({ _id, user_id })

这个对象将被传递给你的批处理函数。如果您这样做,您需要为您的加载器的构造函数提供一个cacheKeyFn,以便数据加载器可以判断两个键何时相等。在这种情况下,这样做很简单:

新数据加载器(batchLoadFn,{ cacheKeyFn: ({ _id, user_id }) => ${_id}${user_id}, })

谨慎使用JSON.stringify,因为您想确保字符串中属性的正确顺序。

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多