Trong mã của tôi, tôi có một loạt các cuộc gọi chức năng. Tôi lặp lại các cuộc gọi này và sử dụng .apply() để gọi cho họ. Vấn đề là nếu cuộc gọi của hàm mới mất bất kỳ loại thời gian nào, vòng lặp sẽ .apply() và gọi hàm tiếp theo trước khi hàm trước kết thúc. >. < Dưới đây là một ví dụ:Tôi làm cách nào để thêm gọi lại vào phương thức .apply()?
function someFunc(element, calls){
if(calls.length){
fn = calls[0];
calls.shift();
fn.apply(element, args);
someFunc(element, calls);
}
}
Vì vậy, nếu có một callback trên áp dụng chức năng này sau đó có thể làm việc như thế nào tôi muốn nó. tức là
function someFunc(element, calls){
if(calls.length){
fn = calls[0];
calls.shift();
fn.apply(element, args, function(){
someFunc(element, calls);
});
}
}
Tôi cũng có câu hỏi về cách gọi hàm someFunc bên trong chức năng gọi lại. Các hàm trong mảng calls
của tôi ảnh hưởng đến biến số element
của tôi. Vì vậy, tôi muốn chắc chắn rằng sau khi nó được thay đổi, nó được chuyển tới someFunc trong hàm gọi lại để hàm tiếp theo có thể thao tác nó. Đôi khi tôi chỉ bị lẫn lộn với bối cảnh this
. :)
Nếu nó giúp, tôi đang sử dụng jQuery. Tôi biết làm thế nào để thêm callbacks cho các phương thức jQuery nhưng tôi không biết làm thế nào để làm điều đó khi tôi đang đối phó với mã JavaScript gốc. Tôi làm cách nào để thêm gọi lại vào phương thức .apply()?
Không có cách nào để làm những gì bạn muốn trừ khi bạn biết một mẫu tham số mà tất cả các chức năng của bạn theo dõi. – Pointy
@Pointy - Tại sao tôi cần một mẫu tham số nếu tôi đặt tất cả các tham số của mình trong một mảng hay còn gọi là 'args'? – Aust
Vấn đề là không có cách nào để cho biết liệu một hàm không đồng bộ và được thiết kế để chấp nhận tham số hàm gọi lại (hoặc hai tham số như vậy hay nhiều hơn). Bạn không thể làm cho hệ thống "chờ" cho một hàm và theo dõi không đồng bộ của nó để kết thúc. Vì vậy, nếu bạn * biết * rằng tất cả các hàm của bạn (ví dụ) lấy một cuộc gọi lại làm tham số cuối cùng, thì bạn có thể làm việc gì đó. – Pointy