Typescript GraphQL Mutation 如何遍历对象数组执行批量更新
首先修正现有代码的问题
你当前定义的updateUser函数内部又调用了同名的updateUser方法,会导致无限递归报错,优先给GraphQL生成的Mutation方法改个不冲突的名字,比如改成updateUserMutation。
方案1:并行批量执行(无接口频率限制时优先用,速度快)
所有更新请求同时发出,等待全部执行完成:
// 你的用户数组 const userList = [/* 你的用户对象数组 */] // 修正命名后的单用户更新方法 async function updateSingleUser(user: ValuesType['user']) { await updateUserMutation({ variables: { id: user.id, status: "inactive", }, }); } // 批量调用 async function batchUpdate() { try { await Promise.all(userList.map(user => updateSingleUser(user))) console.log('全部用户更新成功') } catch (err) { console.error('更新出错:', err) } }
这种方案默认单个请求失败会直接抛出异常,你可以根据需求给单个请求加catch处理失败逻辑,避免单个失败影响其他请求。
方案2:串行顺序执行(有频率限制时用)
逐个执行更新请求,前一个完成再发下一个:
async function batchUpdateSerial() { try { for (const user of userList) { await updateSingleUser(user) } console.log('全部用户更新成功') } catch (err) { console.error('更新出错,已停止后续请求:', err) } }
优化建议
如果你的GraphQL服务端支持,更推荐写一个批量更新的Mutation,一次性传入所有需要更新的用户ID数组,服务端统一处理,能大幅减少网络请求开销,性能远高于循环调用单用户更新接口。
内容的提问来源于stack exchange,提问作者axelhaar
相关产品推荐
相关产品推荐

