Class PromiseProxyMixin

public

A low level mixin making ObjectProxy promise-aware.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { resolve } from 'rsvp';
import $ from 'jquery';
import ObjectProxy from '@ember/object/proxy';
import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';

let ObjectPromiseProxy = ObjectProxy.extend(PromiseProxyMixin);

let proxy = ObjectPromiseProxy.create({
  promise: resolve($.getJSON('/some/remote/data.json'))
});

proxy.then(function(json){
   // the json
}, function(reason) {
   // the reason why you have no json
});

the proxy has bindable attributes which track the promises life cycle

1
2
3
4
proxy.get('isPending')   //=> true
proxy.get('isSettled')  //=> false
proxy.get('isRejected')  //=> false
proxy.get('isFulfilled') //=> false

When the $.getJSON completes, and the promise is fulfilled with json, the life cycle attributes will update accordingly. Note that $.getJSON doesn't return an ECMA specified promise, it is useful to wrap this with an RSVP.resolve so that it behaves as a spec compliant promise.

1
2
3
4
proxy.get('isPending')   //=> false
proxy.get('isSettled')   //=> true
proxy.get('isRejected')  //=> false
proxy.get('isFulfilled') //=> true

As the proxy is an ObjectProxy, and the json now its content, all the json properties will be available directly from the proxy.

1
2
3
4
5
6
7
8
9
// Assuming the following json:
{
  firstName: 'Stefan',
  lastName: 'Penner'
}

// both properties will accessible on the proxy
proxy.get('firstName') //=> 'Stefan'
proxy.get('lastName')  //=> 'Penner'

Show:

Will become true if the proxied promise is fulfilled.

Once the proxied promise has settled this will become false.

Will become true if the proxied promise is rejected.

Once the proxied promise has settled this will become true.

The promise whose fulfillment value is being proxied by this object.

This property must be specified upon creation, and should not be changed once created.

Example:

1
2
3
4
5
6
import ObjectProxy from '@ember/object/proxy';
import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';

ObjectProxy.extend(PromiseProxyMixin).create({
  promise: <thenable>
});

If the proxied promise is rejected this will contain the reason provided.