func groupTaskForFetchUsers(uidList: [String]) async -> [UserInfo] {
let datas = await withTaskGroup(of: UserInfo?.self) { group in
for uid in uidList {
group.addTask {
let data = await self.fetchUserInfo(uuid: uid)
if let error = data.error {
CommonUtil.print(output: "error: \(error.localizedDescription)")
return nil
}
return data.result
}
}
var dataList: [UserInfo?] = []
for await userInfo in group {
dataList.append(userInfo)
}
return dataList.compactMap { $0 }
}
return datas
}
유저 리스트에서 순서대로 요청은 하지만 요청한 순서대로 데이터를 받는다는 보장이 없기 때문에 순서가 뒤섞이는 문제가 발생한다.
enumerated
를 사용한다.func groupTaskForFetchUsers(uidList: [String]) async -> [UserInfo] {
let datas = await withTaskGroup(of: (Int, UserInfo?).self) { group in
for (index, uid) in uidList.enumerated() {
group.addTask {
let data = await self.fetchUserInfo(uuid: uid)
if let error = data.error {
CommonUtil.print(output: "error: \(error.localizedDescription)")
return (index, nil)
}
return (index, data.result)
}
}
var dataList: [UserInfo?] = Array(repeating: nil, count: uidList.count)
for await (index, userInfo) in group {
dataList[index] = userInfo
}
return dataList.compactMap { $0 }
}
return datas
}
문제 해결 후 받은 찜이 많은 순서대로 나오는 것을 볼 수 있습니다.