Class PromiseProxyMixin
publicA 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' |
isFulfilled public
Defined in packages/@ember/object/promise-proxy-mixin.ts:145
Will become true
if the proxied promise is fulfilled.
isPending public
Defined in packages/@ember/object/promise-proxy-mixin.ts:120
Once the proxied promise has settled this will become false
.
isRejected public
Defined in packages/@ember/object/promise-proxy-mixin.ts:137
Will become true
if the proxied promise is rejected.
isSettled public
Defined in packages/@ember/object/promise-proxy-mixin.ts:128
Once the proxied promise has settled this will become true
.
promise public
Defined in packages/@ember/object/promise-proxy-mixin.ts:154
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 ' /object/proxy'; import PromiseProxyMixin from ' /object/promise-proxy-mixin'; ObjectProxy.extend(PromiseProxyMixin).create({ promise: <thenable> }); |
reason public
Defined in packages/@ember/object/promise-proxy-mixin.ts:110
If the proxied promise is rejected this will contain the reason provided.