Post

Replies

Boosts

Views

Activity

Swift - Async calls in loop
Hi guys, I hope you are doing fine. I am trying to achieve following thing: ) Fetch data array from database (async call) ) Iterate over fetched data array ) Fetch additional information about each object (async call) ) Create a new data array with all the information and return it back Currently, I have following approach self.dataAccessService.fetchRepliesByCommentId(completionHandler: { (commentReplyArray) in       for var i in 0..<commentReplyArray.count {         let commentReply = commentReplyArray[i]         let commentItem = CommentItem()                   self.fetchDetailsAboutCommentReply(commentReplyObject: commentReply) { (commentItem) in           commentItem.commentObject = commentReply                       dataSource.insert(commentItem, at: index + i + 1) -> APP CRASHES HERE, i is never 0 here           ips.append(IndexPath(row: index + i + 1 , section: 0))                                                                      if (i == commentReplyArray.count - 1) {             self.delegate?.didLoadReplies(dataSource: dataSource, ips: ips)           }         }       }     }, commentId: commentItem.commentObject.id) My fetchDetailsAboutCommentReply function: private func fetchDetailsAboutCommentReply(commentReplyObject:CommentReply, completionHandler:@escaping(CommentItem)->()) {      let group = DispatchGroup()      let commentItem = CommentItem()            group.enter()       self.dataAccessService.fetchUserById(completionHandler: { (userObject) in         commentItem.userObject = userObject         group.leave()      }, uid: commentReplyObject.userId)                   group.enter()       self.dataAccessService.fetchDownloadURLOfProfileImage(organizerId: commentReplyObject.userId) { (contentURL) in       commentItem.userObject.contentURL = contentURL       group.leave()      }           group.notify(queue: .main) {       completionHandler(commentItem)     }   } My question is how, I can change my code, so the loop basically "pauses" until I fetch every detail information of the iterated object, add it into the dataSource Array and then continues with the next one? Thanks and stay healthy!
11
0
5.3k
Dec ’20