2013-01-06 12 views
5

Oto mój kodJak uzyskać wartość zwracana przez funkcję zwrotną

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

gdzie b jest funkcją synchronicznego. Wołam powyższą funkcję w dowolnym miejscu w kodzie

var saved = save_current_side(current_side); 

Zmienną zapisany jest niezdefiniowany. Jak uzyskać zwrot wartości wyceniony przez funkcję zwrotną

+1

Co to jest 'b()'? Czy jest to metoda asynchroniczna? – Alexander

Odpowiedz

18

Jeśli b jest metodą synchronoys, wystarczy zapisać wartość w zmiennej, tak aby można było odesłać go z funkcji save_current_side zamiast z funkcji callback:

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

Jeśli b jest metodą asynchroniczną, nie można zwrócić wartości z funkcji, ponieważ jeszcze nie istnieje po wyjściu z funkcji. Użyj 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

Drogi Guffa Jak mogę użyć wartości z "save_current_side" po oddzwonieniu ?? –

+0

@KostantinosIbra: Nie można, ponieważ funkcja zwraca przed wywołaniem zwrotnym. Możesz przywrócić dowolną funkcję i używać jej tak jak zwykle, ale jak to się dzieje przed wywołaniem zwrotnym, nie masz dostępu do wyniku z asynchronicznego połączenia w tym czasie. – Guffa

3

Musisz przesłać funkcję zwrotną. Przykład:

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

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

Po prostu trzeba przejść zwrotnego jako argument w funkcji, jak podano poniżej

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

ten sposób można wywołać go w dowolnym miejscu w kodzie

var saved; 
save_current_side(current_side,function(saved){ 
    console.log(saved); 
}); 
Powiązane problemy