Eventuali duplicati:
What are the differences between Deferred, Promise and Future in Javascript?Asynchronous JavaScript - callback vs differite/Promessa
Ultimamente sto facendo uno sforzo per migliorare la qualità delle mie applicazioni JavaScript.
Uno schema che ho adottato è quello di utilizzare un oggetto "contesto dati" separato per caricare i dati per la mia applicazione (in precedenza lo stavo facendo direttamente nei miei modelli di vista).
L'esempio seguente restituisce i dati che viene inizializzato sul client:
var mockData = (function($, undefined) {
var fruit = [
"apple",
"orange",
"banana",
"pear"
];
var getFruit = function() {
return fruit;
};
return {
getFruit: getFruit
}
})(jQuery);
Nella maggior parte dei casi saremo caricamento dei dati dal server in modo che non possiamo restituire una risposta immediata. Sembra che io abbia due opzioni per come gestiamo questo nella nostra API:
- Utilizzando un callback
- Restituzione di una promise.
In precedenza avevo sempre usato l'approccio di callback:
var getFruit = function(onFruitReady) {
onFruitReady(fruit);
};
// ...
var FruitModel = function(dataContext, $) {
return {
render: function() {
dataContext.getFruit(function(fruit) {
// do something with fruit
});
}
};
};
Tuttavia, posso vedere come è possibile finire in un inferno di richiamata, in particolare per la costruzione di applicazioni JavaScript complesse.
Poi ho trovato il modello di progettazione Promises. Invece di richiedere al chiamante di fornire una richiamata, io invece restituire una "promessa" che si può osservare:
var getFruit = function() {
return $.Deferred().resolve(fruit).promise();
};
// ...
dataContext.getFruit().then(function(fruit) {
// do something with fruit
});
posso vedere evidenti vantaggi dell'utilizzo di questo modello, soprattutto perché posso wait
su più oggetti anticipate che potrebbero essere molto utile quando si caricano i dati di inizializzazione per un'applicazione a singola pagina.
Tuttavia, sono desideroso di comprendere i pro e i contro di ciascun modello prima di iniziare a utilizzare la rabbia. Mi interessa anche se questa è la direzione in cui entrano le altre librerie. Sembra che sia il caso di jQuery.
Ecco un link per il violino che sto usando per il test.
Beh buona notizia: le API Ajax jQuery * * già promesse di ritorno! – Pointy
[Leggi il meccanismo qui.] (Http://api.jquery.com/jQuery.ajax/#jqXHR) – Pointy
Sì, questo è il modo in cui mi sono imbattuto nel modello in quanto cercavo un modo per astrarre le mie chiamate Ajax. –