DataLoader GraphQL 返回错误数据的问题

问题描述

我使用带有 GraphQL 的节点开发了一个 API,当我添加 DataLoaders 时,解析器开始返回错误的数据,比如我传递了 4 个 Id [3,3,1,2],批处理函数数据库中查找并返回有序的[1,2,3] 当返回到解析器时,第一个 id 为 3 的对象接收到 id 为 1 的响应。

Project Packages versions ->
    "DataLoader": "1.3.0","express": "^4.17.1","express-graphql": "^0.11.0","graphql": "^15.3.0","graphql-fields": "^2.0.3","graphql-tools": "^6.2.4",

我也尝试使用最新版本的数据加载器,但没有用

关注我的代码

Resolver ->

Address: {
        idCity: (parent,args,{ db,DataLoaders: { cityLoader } }: { db: DbConnection,DataLoaders: DataLoaders },info: GraphQLResolveInfo) => {
            return cityLoader.load({ info,key: parent.get('idCity') })
                .catch(handleError);
        }
    },
Data Loader Factory ->

cityLoader: new DataLoader<DataLoaderParam<number>,CityInstance>(
                (params: DataLoaderParam<number>[]) => CityLoader.batchCities(this.db.City,params,this.requestedFields),{
                    cacheKeyFn: (param: DataLoaderParam<number[]>) => param.key
                }
            ),
DataLoaderParam ->

export interface DataLoaderParam<T> {
    key: T;
    info: GraphQLResolveInfo;
}
City Loader ->

export class CityLoader {
    static async batchCities(City: CityModel,params: DataLoaderParam<number>[],requestedFields: RequestedFields) {
        const ids: number[] = params.map(item => item.key);

        return City["findAll"]({
            where: { id: { $in: ids } },attributes: requestedFields.getFields(params[0].info,{ keep: ['id'],exclude: [] })
        });
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)