Hãy nói rằng tôi có một cái gì đó như sau:Khi sử dụng cuộc gọi lại bên trong một vòng lặp trong javascript, có cách nào để lưu biến được cập nhật trong vòng lặp để sử dụng trong cuộc gọi lại không?
for(var i = 0; i < length; i++){
var variable = variables[i];
otherVariable.doSomething(variable, function(err){ //callback for when doSomething ends
do something else with variable;
}
Vào thời điểm callbacks được gọi là, variable
chắc chắn sẽ biến cuối cùng cho tất cả các callbacks, thay vì là một khác nhau cho mỗi cuộc gọi lại, như tôi sẽ như. Tôi nhận ra rằng tôi có thể vượt qua variable
để doSomething()
và sau đó nhận được rằng trở lại như một phần của cuộc gọi lại, nhưng doSomething()
là một phần của một thư viện bên ngoài, và tôi không muốn lộn xộn xung quanh với mã nguồn cho điều đó.
Làm những người bạn biết JavaScript tốt hơn tôi biết liệu có cách nào khác để làm những gì tôi muốn làm không?
nhất, và cảm ơn,
Sami
Thật không may, điều này không hữu ích trong trường hợp của tôi vì doSomething() là một hàm từ thư viện mà tôi không muốn chỉnh sửa. Khi thư viện này được cập nhật, tôi sẽ phải giữ lại mã nguồn và đó là điều mà tôi không muốn giải quyết. Giả sử tôi không thể thay đổi hàm doSomething(), tôi có thể làm gì không? – thisissami
Điều này không yêu cầu bất kỳ thay đổi nào đối với 'doSomething()'. Tôi giả định rằng 'doSomething' chỉ đơn giản là lấy một cuộc gọi lại và rằng sự bao gồm tham số' biến' là thứ mà bạn có thể đang đề xuất thay đổi. Nếu chữ ký của 'doSomething' là' doSomething (val, callback) 'thì chỉ cần sửa đổi ví dụ của tôi thành' otherVariable.doSomething (biến, callbackFor (biến)) '. Điều quan trọng là một phạm vi mới được tạo ra, bằng cách gọi một hàm, để giữ giá trị của 'biến' cho hàm gọi lại. – aparker42
Hmm vì vậy tôi đoán tôi hơi bối rối. Cách 'doSomething()' hoạt động là nó truyền biến, và sau đó 'doSomething()' sẽ gọi hàm callback được chỉ định, trong đó tham số đầu tiên là bất kỳ mã lỗi tiềm năng nào xuất phát từ 'doSomething()'. Nếu tôi đặt một wrapper 'function (variable)' quanh callback để tạo một scope mới, không phải 'function (variable)' trở thành callback thay vào đó, và tham số 'variable' thực sự là thông báo lỗi? – thisissami