Funzione asincrona chiamate iterate

0

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){});};
    
posta Gaotter 22.07.2013 - 16:24
fonte

2 risposte

1

Perché non usare una sola chiamata setOrReturnSession , che restituisce la sessione corrente se è già impostata, oppure crea una nuova sessione e la restituisce.

Sì, è leggermente più lento inviare i dati della sessione attraverso il filo ogni chiamata, ma è molto più veloce di eseguire entrambe le chiamate in modo sincrono quasi tutte le volte.

Significa anche che tutta la tua logica di sessione rimane sul server a cui appartiene, piuttosto che spalmarsi sul client e sul server nel modo in cui lo fai ora.

    
risposta data 17.01.2014 - 16:42
fonte
0

Penso che devi chiamare la tua prima ajax in modo sincrono usando async = false; dichiarato nella tua chiamata ajax.

Chiamerà la tua funzione ajax asincrona in modo sincrono così che dopo aver ricevuto risposta da ajax eseguirà il prossimo codice.

    
risposta data 17.01.2014 - 16:34
fonte

Leggi altre domande sui tag