Sha256: 46935f1523b722da76815419cedd9aacdfbb49a9f171bd7f34768a764de2e357

Contents?: true

Size: 1.36 KB

Versions: 31

Compression:

Stored size: 1.36 KB

Contents

# Promise

`Promise` is a class available in the Opal stdlib for helping structure asynchronous code.

It can be required inside any Opal applicaton:

```ruby
require 'promise'
```

## Usage

This example shows how to use a `HTTP` request from `opal-jquery` from a callback style, into a promise style handler.

```ruby
def get_json(url)
  promise = Promise.new

  HTTP.get(url) do |response|
    if response.ok?
      promise.resolve response.json
    else
      promise.reject response
    end
  end

  promise
end

get_json('/users/1.json').then do |json|
  puts "Got data: #{json}"
end.fail do |res|
  alert "It didn't work :( #{res}"
end
```

A promise can only be resolved or rejected once.

### Chaining Promises

Promises become useful when chained together. The prevous example could be extended to get another object from the result of the first request.

```ruby
get_json('/users/1.json').then do |json|
  get_json("/posts/#{json[:post_id]}.json")
end.then do |post|
  puts "got post: #{post}"
end
```

### Composing Promises

`Promise.when` can be used to wait for more than 1 promise to resolve (or reject). Lets assume we wanted to get 2 different users:

```ruby
first = get_json '/users/1.json'
second = get_json '/users/2.json'

Promise.when(first, second).then do |user1, user2|
  puts "got users: #{user1}, #{user2}"
end.fail do
  alert "Something bad happened"
end
```

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
opal-0.11.4 docs/promises.md
opal-0.11.3 docs/promises.md
opal-0.11.2 docs/promises.md
opal-0.11.1 docs/promises.md
opal-0.11.1.pre docs/promises.md
opal-0.10.6 docs/promises.md
opal-0.10.6.beta docs/promises.md
opal-0.11.0 docs/promises.md
opal-0.10.5 docs/promises.md
opal-0.10.4 docs/promises.md
opal-0.11.0.rc1 docs/promises.md
opal-0.10.3 docs/promises.md
opal-0.10.2 docs/promises.md
opal-0.10.1 docs/promises.md
opal-0.10.0 docs/promises.md
opal-0.10.0.rc2 docs/promises.md
opal-0.9.4 docs/promises.md
opal-0.9.3 docs/promises.md
opal-0.10.0.rc1 docs/promises.md
opal-0.10.0.beta5 docs/promises.md