Le promesse sono un modello abbastanza nuovo per me, quindi sto ancora costruendo il mio intuito per loro.
Recentemente mi sono imbattuto in un caso in cui un codice in un bit di codice simile ad un adattatore era una volta sincrono, e quindi divenne asincrono, quindi furono introdotte delle promesse. Prendere in considerazione:
function runCalculation() {
var params = this.getParams();
this.callLibraryCalculation(params);
}
Qui getParams raccoglie valori da vari luoghi e li inserisce in un unico oggetto che può essere utilizzato da callLibraryCalculation , che include, come ci si aspetterebbe, una chiamata da un fonte esterna. Tutto questo è ovviamente semplificato ai fini della domanda.
Quindi tutto ha funzionato, finché non è stato necessario un nuovo caso di utilizzo getParams per recuperare alcuni valori da un'API esterna, introducendo un comportamento asincrono. Quindi questa funzione è stata modificata per gestire asincroni, utilizzando e restituendo una promessa. Il che significa che il consumo è cambiato.
function runCalculation() {
return this.getParams().then(function(params) {
this.callLibraryCalculation(params);
});
}
Ho scelto di restituire la promessa qui perché le funzioni che chiamano runCalculation hanno una logica dipendente che deve essere .then () -ed. ma la mia domanda riguarda i chiamanti di runCalculation . Ora stanno producendo le loro promesse a seguito del consumo di quello restituito qui. Attualmente posso lasciare la maggior parte di quelle promesse fuggire nell'etere, perché i chiamanti rappresentano la fine dell'esecuzione. Ma noto che nel caso in cui non sia la fine dell'esecuzione, questo passaggio di promesse inizia a invadere una grande quantità di codice, che ribolle dal chiamante al chiamante.
La mia inclinazione è di restituire sempre una promessa da una funzione che deve usarne una per ordinare la sua logica.
Questa inclinazione è una buona intuizione? Dovrei essere preoccupato che Promises, una volta introdotto, inizi a prendere il mio codice?
O per porre una domanda più rispondente: Ci sono delle considerazioni che potrei aver mancato che parlano a favore o contro tale pratica?