GraphQL Dataloader-具有load()函数的全局变量

时间:2019-06-15 05:08:47

标签: graphql

我正在使用带有数据加载器的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});
}

1 个答案:

答案 0 :(得分:0)

数据加载器键不必是字符串,它们可以是数组,对象或其他数据类型。因此,您可以这样做:

categoryPhotoLoader.load({ _id, user_id })

,此对象将传递给您的批处理函数。如果执行此操作,则需要为Loader的构造函数提供一个cacheKeyFn,以便数据加载器可以知道两个键何时等效。在这种情况下,执行以下操作就足够简单了:

新的DataLoader(batchLoadFn,{   cacheKeyFn:({{_id,user_id})=> ${_id}${user_id}, })

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