Skip to content

Instantly share code, notes, and snippets.

@MichalBryxi
Last active November 2, 2019 15:21
Show Gist options
  • Save MichalBryxi/22a473c778ab43fd5df6e1b4c60285c5 to your computer and use it in GitHub Desktop.
Save MichalBryxi/22a473c778ab43fd5df6e1b4c60285c5 to your computer and use it in GitHub Desktop.
return promise from computed
import Ember from 'ember';
import {inject as service} from '@ember/service';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
companiesService: service('companies')
});
import {computed} from '@ember/object';
import PromiseProxyMixin from "@ember/object/promise-proxy-mixin";
import ArrayProxy from "@ember/array/proxy";
import Service from '@ember/service';
import RSVP from 'rsvp';
const PendingResponse = ArrayProxy.extend(PromiseProxyMixin);
export default Service.extend({
companies: computed(function() {
// Usual case with ember-data would be:
// let promise = this.store.fetchAll("company");
// Faking the data here for the sake of simplicity:
let promise = new RSVP.Promise((resolve) => {
setTimeout(() => resolve([{name: 'foo'}, {name: 'bar'}]), 3000)
});
let responseObject = PendingResponse.create({ promise });
responseObject.catch(() => {});
return responseObject;
}),
firstCompany: computed('companies.[]', function() {
return this.get('companies.firstObject');
})
});
<h1>List of my companies:</h1>
<ul>
{{#each companiesService.companies as |company|}}
<li>{{company.name}}</li>
{{/each}}
</ul>
And first company is: {{companiesService.firstCompany.name}}
{
"version": "0.15.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js",
"ember": "3.4.3",
"ember-template-compiler": "3.4.3",
"ember-testing": "3.4.3"
},
"addons": {
"ember-data": "3.4.2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment