Skip to content

Instantly share code, notes, and snippets.

@philangist
Created May 17, 2018 06:46
Show Gist options
  • Save philangist/9c66feaf02bca87df56f72789eb46e00 to your computer and use it in GitHub Desktop.
Save philangist/9c66feaf02bca87df56f72789eb46e00 to your computer and use it in GitHub Desktop.
non-blocking version of IndexUserVideo
func (service *IndexService) IndexUserVideo(userID, videoID string) error {
var indexRequest IndexRequest
var err error
done := make(chan bool)
u := make(chan *UserResponse)
v := make(chan *VideoResponse)
e := make(chan error)
go func(){
userResponse, err := service.GetUser(userID)
if err != nil {
e <- err
} else {
u <- userResponse
}
}()
go func(){
videoResponse, err := service.GetVideo(videoID)
if err != nil {
e <- err
}else{
v <- videoResponse
}
}()
go func(){
for {
select {
case response := <- u:
indexRequest.User = response.Data
done <- true
case response := <- v:
indexRequest.Video = response.Data
done <- true
case val := <- e:
err = val
done <- true
}
}
}()
<- done
if err != nil {
return err
}
<- done
err = service.PostIndex(indexRequest)
return err
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment