Skip to content

Instantly share code, notes, and snippets.

@ohcibi
Created December 9, 2015 17:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ohcibi/be090fbfb7e5ccd8ec83 to your computer and use it in GitHub Desktop.
Save ohcibi/be090fbfb7e5ccd8ec83 to your computer and use it in GitHub Desktop.
MutablePromiseMixin
import Ember from 'ember';
let i = 0;
export default Ember.Controller.extend({
appName:'Ember Twiddle',
myService: Ember.inject.service(),
actions: {
foo() {
this.set("myService.promise", new Ember.RSVP.Promise(function(resolve) {
resolve(i++);
}));
}
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
<button {{action "foo"}}>Foo</button>
{{myService.content}}
<br>
<br>
import Ember from 'ember';
let PromiseObjectProxy = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin, {
setPromise: Ember.on("init", function() {
this.set("promise", this.get("deferred.promise"));
})
});
PromiseObjectProxy.defer = function(promise) {
return PromiseObjectProxy.create({ deferred: defer(promise) });
}
function defer(promise) {
let deferred = Ember.RSVP.defer();
promise.then((result) => deferred.resolve(result),
(error) => deferred.reject(error));
return deferred;
}
export default Ember.Service.extend({
promise: Ember.computed({
get() {
return {};
},
set(key, promise, oldValue) {
return PromiseObjectProxy.defer(promise);
}
}),
content: Ember.computed.reads("promise.content")
});
{
"version": "0.4.17",
"EmberENV": {
"FEATURES": {}
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.2.0/ember.debug.js",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/2.2.0/ember-data.js",
"ember-template-compiler": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.2.0/ember-template-compiler.js"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment