Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

In short, they provide clean API for checking on completion and error states of a long-running process from another thread without blocking that thread. This is an essential pattern for UI-related tasks, including web pages.


Fair enough, I think we are thinking of futures slightly differently. I was thinking primarily about the deferred action to get a result (in which case channels and goroutines are equivalent with a select to handle, perhaps, an error result). You're also thinking of the other capabilities around task management and monitoring which I was not.


An easy example of where having promises is nice:

  a := getFoo()
  b := getBar()
  c := getBaz()
If you want to do all 3 in parallel, you may need to use channels and wait groups and stuff. In a language with promises:

  const a = getFoo();
  const b = getBar();
  const c = getBaz();

  await a
  await b
  await c

or even better

  const [a,b,c] = await Promise.all([getFoo(), getBar(), getBaz()])
If/when go generics become available, I expect to see some libraries that make things easier in golang.


This is built into the .NET API though? You can just check the Faulted and Completed properties of the Task you're holding.


GP wants those to be part of the Go stdlib.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: