Sono nuovo nell'usare le chiamate asincrone in ajax. Il mio problema è che ho due "task" del server: uno che controlla solo se la sessione è impostata (veloce) e un'altra che imposta la sessione (più lentamente). Voglio controllare se la sessione è impostata e in caso contrario, impostarla. E voglio provare X numero di volte (non sono sicuro se ho davvero bisogno di farlo, ma questa è un'altra domanda). Se lo faccio con un "while" o un "for" e non penso che sia asincrono, genererò problemi come a molte chiamate, e non sarà la sessione di controllo e quindi la sessione. Potrei farlo sul server, ma non voglio inviare i dati della richiesta se la sessione è impostata, solo se non è impostata. Di seguito è il modo in cui sto cercando di farlo ora, ma non sono sicuro se c'è un modo migliore per farlo? Il codice seguente implementa semplicemente l'idea e non è testato.
L'idea è quella di inviare il contatore avanti e indietro tra il controllo e l'invio della sessione nella funzione di successo. Quello che non mi piace del codice è che la sessione impostata è davvero comprensibile nel contesto di checkSession. Se entro breve tempo tornerò al codice e voglio solo impostareSession, avrei un numero magico di X per assicurarmi che non controlli anche la sessione. C'è un modo più semplice per farlo? Se il codice ha un cattivo odore, per favore dimmelo.
self.start = function() {
self.checkSession(0);
};
self.checkSession = function(count) {
server.CheckSession(function(returnValue){
if(returnValue == false && count < 4){
count++;
self.setSession(count);
}},function(err){});};
self.setSession = function(count) {
var sessionData = someData;
server.SetSession(sessionData, function(d){
self.checkSession(count);
}, function(err){});};