ember.js PromiseProxyMixin


Esempio

Ember viene fornito con un helper integrato che fornirà proprietà calcolate per lo stato di un'attività asincrona.

Professionisti

  • Incorporato - non è necessario un addon.
  • Può essere gestito nel ciclo di vita di un componente.
  • Fornisce proprietà di stato convenienti che possono guidare la logica del modello.

Contro

  • Deve essere racchiuso in un oggetto Ember.Object e non può essere applicato direttamente ad un oggetto Ember.Component .
  • Crea una disconnessione tra la catena di promessa originale e la distruzione del valore del content .
  • Non è molto intuitivo e può essere difficile da ragionare.
  • Non può essere cancellato

JavaScript

import Ember from 'ember';

const {
  Component, PromiseProxyMixin, get, set, computed,
  isPresent, run, RSVP: { Promise }
} = Ember;

const MyPromiseProxy = Ember.Object.extend(PromiseProxyMixin);

export default Component({
  myProxy: computed('promise', {
    get() {
      const promise = get(this, 'promise');
      return isPresent(promise) ? MyPromiseProxy.create({promise}) : null;
    }
  }),

  actions: {
    performTask() {
      const fakeTask = new Promise((resolve) => {
        run.later(resolve, 'Foobar', 2000);
      });
      set(this, 'promise', fakeTask);
    }
  }
});

Modello

{{#if myProxy.isPending}}
  Loading…
{{else}}
  <button onclick={{action "performTask"}}>
    Start Task
  </button>
{{/if}}

{{#if myProxy.isFulfilled}}
  Done. {{myProxy.content}}
{{/if}}

{{#if myProxy.isRejected}}
  Something went wrong. {{myProxy.reason}}
{{/if}}