web-dev-qa-db-ja.com

コールバック関数によって値を返す方法

これが私のコードです

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

ここで、bは同期関数です。上記の関数をコードのどこかで呼び出しています

var saved =  save_current_side(current_side);

保存された変数は未定義です。コールバック関数によって返される値を取得する方法

12
Muhammad Usman

bが同期メソッドの場合、値を変数に格納するだけで、コールバック関数からではなくsave_current_side関数から値を返すことができます。

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

bが非同期メソッドの場合、関数を終了した時点ではまだ存在しないため、関数から値を返すことはできません。コールバックを使用します。

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

コールバック関数を送信する必要があります。例:

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

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

以下に示すように、関数の引数としてコールバックを渡すだけです

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

これは、コードの任意の場所で呼び出すことができる方法です

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