Qual è la terminologia corretta per le promesse di javascript

Mi sto confondendo con la terminologia diversa in giro. Dalla mia comprensione, una promise può essere:

fulfilled rejected pending settled resolved defer 

Significa risolvere risolto? o significa che è stato adempiuto? e cosa diavolo è rimandare?

La terminologia può essere difficile.
Prendiamo dalle specifiche Promises / A + e dalla rispettiva sezione ES6 che ci sono 3 stati :

  • in attesa – la promise non ha ancora preso un valore, il suo futuro è ancora incerto.
  • soddisfatto – la promise ha ottenuto con successo un valore di risultato “assegnato”
  • respinto – la promise viene data una ragione per cui nessun risultato potrebbe essere acquisito, tipicamente un errore.

Il termine risolto è un iperonimo per adempiuto e respinto, che significa sia – l’opposto di in sospeso.

I verbi dinamici soddisfano e rifiutano descrivono cambiando lo stato da in sospeso o soddisfatto o rifiutato. Queste transizioni sono chiamate realizzazione o rifiuto della promise.

Quelli erano facili Ora, la risoluzione è una bestia diversa. A volte è usato anche come “adempiere”, ma sarebbe meglio intendere come sistemare il destino della promise sia soddisfatta sia respinta. La risoluzione (raramente: regolamento) di una promise significa che lascia lo stato in sospeso. Ma nemmeno questo è accurato – il problema è la natura ricorsiva della Procedura di risoluzione della promise :

  • risolvere una promise con un valore “normale” significa soddisfarlo
  • risolvere una promise con una promise (o praticabile) significa adottare il suo stato:

    • risolversi con una promise soddisfatta è un adempimento
    • risolvere con una promise respinta è un rifiuto
    • risolvere con una promise in attesa significa attendere la sua risoluzione

Sì, se una promise è risolta potrebbe non essere nemmeno noto se sarà soddisfatta o respinta. Ma significa che il destino non è più indeterminato , in quanto è vincolato alla promise con la quale ci siamo risolti (notare che è ansible risolvere una promise una sola volta).

Ignorando questo caso speciale, una promise risolta di solito significa una promise risolta.

Oppure, per citare la Specifica ECMAScript 6 :

Una promise viene risolta se è risolta o se è stata “bloccata” per corrispondere allo stato di un’altra promise. Il tentativo di risolvere o rifiutare una promise risolta non ha alcun effetto. Una promise non è risolta se non viene risolta. Una promise irrisolta è sempre in sospeso. Una promise risolta potrebbe essere in sospeso, soddisfatta o respinta.


e cosa diavolo è rimandare?

Rinviare un risultato significa che si restituisce una promise (asincrona) per il risultato e non il risultato direttamente (in modo sincrono). E restituisce anche un rifiuto posticipato anziché lanciare in modo sincrono .

Notare che ” differire ” è anche usato in alcune librerie ( Q ) come nome del metodo per build un object Deferred – vedere questa risposta su Le differenze tra Differito, Promessa e Futuro per una buona spiegazione.
Oh, e non fidarti mai dei nomi delle variabili: il defer potrebbe anche essere un “deferredObject” abbreviato.

I tre stati di promise sono elencati nella sezione 2.1 della specifica Promises / A + .

Dalla specifica:

inserisci la descrizione dell'immagine qui

Quindi, ecco tutti i termini che hai chiesto:

In attesa è lo stato di promise iniziale. L’operazione rappresentata dalla promise non è stata ancora riempita o respinta.

Soddisfatto è un altro dei tre stati di promise. Significa che la promise è stata risolta e ora ha il suo valore risolto. L’operazione rappresentata dalla promise è stata completata con successo.

Respinto è un altro dei tre stati di promise. Significa che la promise è stata respinta e ora ha la sua ragione respinta. L’operazione rappresentata dalla promise non è riuscita ad ottenere un valore e quindi ha un motivo per non riuscire a farlo (in genere un codice di errore o un object di errore, ma può essere qualsiasi cosa).

Stabilito è un termine che significa che la promise è soddisfatta o respinta (ad esempio non è più in sospeso), ma non è uno stato separato solo un termine descrittivo per indicare che non è più in sospeso.

Risolto è un termine che viene spesso utilizzato per indicare la stessa cosa fulfilled , ma i due non sono esattamente la stessa cosa. Una promise può essere risolta con un valore che porta alla realizzazione o può essere risolta con una promise respinta (che porta al rifiuto di questa promise) o può essere risolta con una promise in sospeso (il che significa che ora aspetterà sull’eventuale stato di qualche altra promise).

È difficile dire esattamente cosa intendi per differimento . Le promesse sono spesso classificate come oggetti deferred in quanto sono un object che rappresenta un’azione e un risultato che è rinviato al futuro (si verificherà in futuro). In alcune implementazioni di promesse, ci sono in realtà due tipi di oggetti, un object deferred e un object promise . L’object differito è un superset dell’object promise. Entrambi possono osservare quando l’azione viene risolta o respinta con i gestori .then() . Ma solo l’object deferred può effettivamente cambiare lo stato in resolved o rejected .

In jQuery, puoi creare un object posticipato con $.Deferred() . In altre implementazioni come ES6 promette, hai solo oggetti promettenti con un callback del costruttore che ha funzioni di reject e resolve . Il mondo presumibilmente si sta muovendo verso ciò che ES6 avrà.

Esempio di jQuery che utilizza un object deferred :

 function delay(t) { var defer = $.Deferred(); setTimeout(function() { defer.resolve(); }, t); return defer.promise() } delay(200).then(function() { // run my delayed function now doMyThing(); }); 

Esempio di promise ES6:

  function delay(t) { return new Promise(function(resolve, reject) { setTimeout(function() { resolve(); }, t); }); } delay(200).then(function() { // run my delayed function now doMyThing(); }); 

” States and Fates ” di Domenic Denicola è un sumrio buono e conciso.

Stati:

  • una promise è soddisfatta se promise.then(f) chiamerà f “il prima ansible”
  • una promise viene rifiutata se promise. promise.then(undefined, r) chiamerà r “il prima ansible”
  • una promise è in sospeso se non è né soddisfatta né respinta.

Parche:

  • una promise viene risolta se tentare di risolverla o rifiutarla non ha alcun effetto, cioè la promise è stata “bloccata” per seguire un’altra promise, o è stata adempiuta o respinta
  • una promise non è risolta se non viene risolta, cioè se provare a risolverlo o rifiutarlo avrà un impatto sulla promise.

Segui il link per i dettagli ‘relativi stati e destini’.