ember.js compito di concorrenza ember


Esempio

Uno standard di fatto della comunità alternativa è un addon chiamato ember-concurrency che fa andare via molte promesse.

Può essere installato con il comando ember install ember-concurrency .

Professionisti

  • Ragionamento intuitivo di codice asincrono complesso.
  • Offre un'API completa per la gestione delle attività.
  • Può essere cancellato
  • Può essere utilizzato direttamente in un componente senza la necessità di un oggetto proxy.
  • Le promesse di distruzioni all'interno della funzione compito.
  • È possibile utilizzare JavaScript try / catch / finally per gestire asincroni assegnazione, eccezioni e pulizia.
  • Le attività vengono annullate automaticamente in willDestroy all'evento willDestroy , evitando errori nell'impostazione dei valori sugli oggetti distrutti (ad esempio dopo un timer)

Contro

  • Non incorporato: richiede ember install ember-concurrency
  • Utilizza le funzioni del generatore che possono confondere gli sviluppatori utilizzati per promettere catene.

JavaScript

import Ember from 'ember';
import { task, timeout } from 'ember-concurrency';

const { Component, set } = Ember;

export default Component.extend({
  myTask: task(function * () {
    set(this, 'error', null);
    try {
      yield timeout(2000);
      return 'Foobar';
    } catch (err) {
      set(this, 'error', error);
    }
  }).keepLatest()
});

Modello

{{#if myTask.isIdle}}
  <button onclick={{perform myTask}}>
    Start Task
  </button>
{{else}}
  Loading&hellip;
{{/if}} 

{{#if myTask.last.value}}
  Done. {{myTask.last.value}}
{{/if}}

{{#if error}}
  Something went wrong. {{error}}
{{/if}}