2013-01-06 39 views
5

Đây là mã của tôiLàm thế nào để có được trả lại một giá trị bằng một hàm 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; 
     } 
    }); 
} 

nơi b là chức năng đồng bộ. Tôi đang gọi hàm trên ở bất kỳ đâu trong mã

var saved = save_current_side(current_side); 

Biến được lưu không xác định. Cách nhận trả lại có giá trị bằng chức năng gọi lại

+1

'B() 'là gì? Nó là một phương pháp không đồng bộ? – Alexander

Trả lời

18

Nếu b là một phương pháp synchronoys, bạn chỉ cần lưu trữ các giá trị trong một biến, do đó bạn có thể trả lại từ save_current_side chức năng thay vì từ chức năng gọi lại:

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

Nếu b là một phương pháp không đồng bộ, bạn không thể trả về giá trị từ hàm, vì nó chưa tồn tại khi bạn thoát khỏi hàm. Sử dụng một 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

Kính gửi Guffa Làm cách nào tôi có thể sử dụng giá trị trong "save_current_side" sau khi gọi lại ?? –

+0

@KostantinosIbra: Bạn không thể, vì hàm trả về trước khi gọi lại. Bạn có thể trả lại bất cứ điều gì bạn thích từ hàm và sử dụng nó như bình thường, nhưng khi điều đó xảy ra trước khi gọi lại bạn không có quyền truy cập vào kết quả từ cuộc gọi không đồng bộ tại thời điểm đó. – Guffa

3

Bạn cần gửi chức năng gọi lại. Ví dụ:

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

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

Bạn chỉ phải vượt qua gọi lại như là đối số trong hàm như đưa ra dưới đây

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

Đây là cách bạn có thể gọi nó bất cứ nơi nào trong mã

var saved; 
save_current_side(current_side,function(saved){ 
    console.log(saved); 
}); 
Các vấn đề liên quan