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/)
grande legame dardo! La coda di Mircrotask era un mistero per me - questo lo chiarirà. – user1463822