web-dev-qa-db-fra.com

Comment obtenir une valeur renvoyée par une fonction de rappel

Voici mon code

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

où b est la fonction synchrone. J'appelle la fonction ci-dessus n'importe où dans le code

var saved =  save_current_side(current_side);

La variable enregistrée n'est pas définie. Comment être retourné évalué par la fonction de rappel

12
Muhammad Usman

Si b est une méthode synchronoys, vous stockez simplement la valeur dans une variable, afin de pouvoir la renvoyer à partir de save_current_side fonction au lieu de la fonction de rappel:

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

Si b est une méthode asynchrone, vous ne pouvez pas renvoyer la valeur de la fonction, car elle n'existe pas encore lorsque vous quittez la fonction. Utilisez un rappel:

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

save_current_side(current_side, function(a){
  console.log(a);
});
24
Guffa

Vous devez soumettre la fonction de rappel. Exemple:

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

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

Il vous suffit de passer le rappel comme argument dans la fonction comme indiqué ci-dessous

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

Voici comment l'appeler n'importe où dans le code

var saved;
save_current_side(current_side,function(saved){
     console.log(saved);
});
3
Tripathi29