2015-05-06 11 views
7

Qual è lo scopo del metodo async in polimero? Quando dovrei usarlo?Polimero: quando usare async?

In questo momento lo sto usando come hm-questo-bug-è-kinda-strano-forse-async-sarà-fix-it-yep-id-did-yey. Non mi dà alcuna sicurezza nel mio codice mentre sto spruzzando async proprio quando compare qualche errore di temporizzazione.

risposta

8

Qui la risposta è leggermente diversa a seconda che si stia utilizzando Polymer 0.5 o 1.0. In 1.0, più operazioni sono sincrone, quindi potresti non vedere abbastanza bisogno di asincrono (anche, il async method works slightly differently in 1.0).

Iniziamo con 0,5. La maggior parte dei casi ha a che fare con gli effetti del cambiamento delle proprietà. Le proprietà utilizzate in associazioni di dati o osservatori sono osservate per le modifiche. Quando si modifica una di queste proprietà , gli eventuali effetti collaterali di tale modifica avvengono in modo asincrono, con temporizzazione della microtask. Ciò significa che il lavoro si verifica dopo il ritorno del gestore eventi corrente, ma prima dello viene elaborato l'evento successivo.

In altre parole, se ho una associazione dati come questo:

<div id="output">{{someProperty}}</div> 

Supponiamo che io ho il seguente codice:

this.someProperty = "New Value"; 
console.log(this.$.output.textContent); // logs "Old Value" 

Questo è dove l'asincronia ti morde. Se si desidera aggiornare i dati associati, è necessario offrire al sistema di associazione dei dati la possibilità di lavorare. Se si sposta che console.log dichiarazione in un'asincrona, quindi è eseguito in un secondo momento, si ottiene la risposta che ci si aspetta:

this.async(function() { 
    console.log(this.$.output.textContent); // logs "New Value" 
}); 

maggior parte del tempo, non è necessario per colpire a dati associati elementi DOM. Ma nel caso in cui lo fai, o che stai aspettando l'effetto collaterale di un osservatore, probabilmente vuoi un asincrono.

In Polymer 1.0, gli osservatori di dati e di proprietà singola sono sincroni. Gli osservatori multi-proprietà e some DOM operations sono asincroni.

(Mentre le API sono diversi da JavaScript, questo articolo Dart circa il ciclo degli eventi è il migliore che ho trovato per descrivere il ciclo di eventi e Microtask coda: https://www.dartlang.org/articles/event-loop/)

+2

grande legame dardo! La coda di Mircrotask era un mistero per me - questo lo chiarirà. – user1463822

Problemi correlati