Skip to content

garlicnation/promises

Repository files navigation

promises GoDoc Go Report Card

Promises is a library that builds something similar to JS style promises, or Futures(as seen in Java and other languages) for golang.

Promises is type-safe at runtime, and within an order of magnitude of performance of a solution built with pure channels and goroutines.

For a more thorough introduction to the library, please check out WHY.md

Examples

Single promise:

p := promises.New(func() int {
  return 1
})
var resolved int
err := p.Wait(&resolved)

Chained Promise

p := promises.New(func() int {
  return 1
})
timesTwo := p.Then(func(x int) int {
  return x*2
})
var resolved int
err := timesTwo.Wait(&resolved)

Promise.all

p := promises.New(func() int {
  return 1
})
timesTwo := p.Then(func(x int) int {
  return x * 2
})
plusFour := timesTwo.Then(func(x int) int{
  return x + 4
})

all := promises.All(p, timesTwo, plusFour)
results := []int{}
err := all.Wait(&results)

Error handling

p := promises.New(http.Get, "http://example.com")
// Do other work while Get processes in a goroutine...
var r *http.Response
err := p.Wait(&r)
// Errors are swallowed by promises and returned by wait.