问题描述
我使用带有 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 (将#修改为@)