Ho utilizzato una chiamata ricorsiva a una chiusura per attenuare alcune condizioni di gara che sto ottenendo (è quello che penso sia). Mi piacerebbe sapere se (e perché) questa è una buona soluzione o una cattiva soluzione.
function getResources(activity, resource) {
var q = when.defer(),
resourceQuery = constructSelectionQuery(resource),
timeoutCounter = 0,
timeoutLimit = 100;
function queryDatabase() {
query.getResult({
query: resourceQuery
}, function(err, result) {
if (result.length === 0) {
if (timeoutCounter > timeoutLimit) {
q.reject();
}
timeoutCounter++;
//subsequent call(s)
queryDatabase();
} else {
q.resolve(result);
}
});
}
//initial call
queryDatabase();
return q.promise;
}
Quello che sto cercando di accertare è la validità dell'uso della ricorsione e della chiusura in questa combinazione - è questo un modo accettabile di affrontare il problema di ripetere la chiamata al database? Senza la ripetizione della chiamata il risultato è a volte vuoto. Questo è curioso dato che questa funzione viene chiamata solo dopo che il record è stato salvato. Tuttavia questo è in un altro sistema quindi suppongo che la velocità di indicizzazione sia errata in MySQL - Non voglio entrare in quell'aspetto del sistema perché sono soddisfatto di quello che ho - La mia domanda è isolata utilizzando questo modello - una chiamata ricorsiva alla chiusura come un modo per ripetere la chiamata.