2013-01-06 27 views
5

Ecco il mio codiceCome ottenere restituito un valore da una funzione di callback

function save_current_side(current_side) { 
    var result; 
    var final = a.b({ 
     callback: function (a) { 
      console.log(a); // its working fine here 
      return a; 
     } 
    }); 
} 

dove b è la funzione sincrona. Sto chiamando la funzione di cui sopra in qualsiasi parte del codice di

var saved = save_current_side(current_side); 

La variabile salvata è indefinito. Come ottenere restituito valutato dalla funzione di richiamata

+1

Cos'è 'b()'? È un metodo asincrono? – Alexander

risposta

18

Se b è un metodo synchronoys, è sufficiente memorizzare il valore di una variabile, in modo che si può ritornare dalla funzione save_current_side anziché dalla funzione di callback:

function save_current_side(current_side) { 
    var result; 
    a.b({ 
    callback: function (a) { 
     result = a; 
    } 
    }); 
    return result; 
} 

Se b è un metodo asincrono, non è possibile restituire il valore dalla funzione, poiché non esiste ancora quando si esce dalla funzione. Utilizzare un callback:

function save_current_side(current_side, callback) { 
    a.b({ 
    callback: function (a) { 
     callback(a); 
    } 
    }); 
} 

save_current_side(current_side, function(a){ 
    console.log(a); 
}); 
+3

Gentile Guffa Come posso usare il valore di "save_current_side" dopo la richiamata ?? –

+0

@KostantinosIbra: non è possibile, poiché la funzione ritorna prima della richiamata. Puoi restituire quello che vuoi dalla funzione e usarlo normalmente, ma come accade prima della richiamata non hai accesso al risultato della chiamata asincrona in quel momento. – Guffa

3

È necessario inviare la funzione di richiamata. Esempio:

function save_current_side(current_side, callback) {   
    a.b({ 
     callback: callback 
    }); 
} 

save_current_side(current_side, function() { 
    console.log('saved'): 
}); 
1

Non vi resta che passare il callback come argomento della funzione, come indicato di seguito

function save_current_side(current_side,callback) { 
    var result; 
    var final = a.b(function(){ 
     callback(a); 
    }); 
} 

In questo modo si può chiamare in qualsiasi parte del codice di

var saved; 
save_current_side(current_side,function(saved){ 
    console.log(saved); 
}); 
Problemi correlati