DEV Community

Discussion on: JavaScript: Handling errors like Go

Collapse
 
oieduardorabelo profile image
Eduardo Rabelo

funny enough, in Go is a little bit harder to do the exactly same!

i recommend you to go through two blog posts:

  1. Go: Concurrency Patterns: Pipelines and cancellation
  2. Go: Learn Concurrency

you will need to use channels/goroutines to achieve the same.. as said by rhymes in this thread, you will need to use WaitGroup!

there's a merge function in the documentation link of item 1 above, where using it, you can do something like this:

func makeRequest(url string) <-chan string {
    res := make(chan string)

    go func() {
        res <- "Request started..."

        _, err := http.Get(url)

        if err != nil {
            res <- "Failed."
        }

        res <- "Done!"
        close(res)
    }()

    return res
}

func main() {
    c1 := makeRequest("https://google.com/")
    c2 := makeRequest("https://twitter.com/")

    for n := range merge(c1, c2) {
        fmt.Println(n)
    }
}

running it will print:

$ go run main.go 
Request started...
Request started...
Done!
Done!

i've been using it since I discovered it :)

Collapse
 
iaziz786 profile image
Mohammad Aziz

This looks simple and powerful. Probably I'll have to dig deeper to understand it. Thanks for the resources.

Collapse
 
theodesp profile image
Theofanis Despoudis

I think you can also use errgroup to handle errors gracefully