Tôi đang tự hỏi liệu có cách đơn giản để trì hoãn sự kiện nhấp không được xử lý trong một khoảng thời gian được chỉ định hay không. Ví dụ: chúng tôi có thể cóSự kiện nhấp hoãn sự kiện
$('#someElement').on('click', 'a', function(event) {
var duration = 1000;
someAsynchronousFunction(); // Start as soon as click occurs
... // Code to delay page transition from taking place for duration specified
});
Vì vậy, trong trường hợp này, chức năng không đồng bộ sẽ được đảm bảo một khoảng thời gian để chạy. Nếu nó đã không hoàn thành công việc của nó trong thời gian này tôi sẽ không quan tâm và chỉ muốn tiếp tục với quá trình chuyển đổi trang. Tôi biết rằng có thể thực hiện điều gì đó gần với
event.preventDefault();
...
setTimeout(function(){
window.location = $(this).attr('href');
}, duration);
Nhưng điều này chỉ hoạt động khi liên kết được nhấp vào một trang đầy đủ. Tôi muốn để có thể đối phó với các liên kết được sử dụng cho các cuộc gọi ajax (mà không thay đổi url) là tốt.
Tôi nhận thấy rằng thư viện mixpanel có hàm track_links dường như thực hiện độ trễ khi chuyển trang, mặc dù hàm đó dường như không hoạt động tốt với hỗ trợ liên kết ajax mà tôi đã đề cập.
Mọi trợ giúp sẽ tuyệt vời! Cảm ơn.
Chỉnh sửa: Vì vậy, tôi cho rằng câu hỏi của tôi không rõ ràng, vì vậy tôi sẽ cố gắng cung cấp thêm một số chi tiết bên dưới.
Tôi không quan tâm nếu chức năng async kết thúc chạy! Tôi chỉ muốn đảm bảo rằng nó có một khoảng thời gian nhất định để thực thi, sau đó tôi không quan tâm liệu nó có kết thúc hay không và muốn tiếp tục với quá trình chuyển đổi trang.
tức là tôi muốn trì hoãn không bắt đầu chức năng async, nhưng bắt đầu quá trình chuyển đổi trang. Hàm async sẽ bắt đầu chạy ngay khi nhấp chuột xảy ra.
Hy vọng điều này rõ ràng hơn một chút!
tôi không hiểu, bạn có muốn thực hiện chức năng sau khi trì hoãn không? r cái gì? – Qchmqs
Tôi nên cụ thể hơn, xin lỗi. Tôi muốn chức năng không đồng bộ bắt đầu ngay sau khi liên kết được nhấp, nhưng tôi muốn nó được đảm bảo một khoảng thời gian nhất định để chạy (và hy vọng hoàn thành những gì nó đang làm) trước khi trang được thay đổi. – nitarshan
Dường như bạn đang rơi vào cái bẫy lâu đời nhất trong JavaScript: trì hoãn một cái gì đó với hy vọng nó sẽ thực hiện sau khi một sự kiện không đồng bộ đã hoàn thành. Đừng làm điều đó: sử dụng gọi lại hoặc lời hứa. Bạn không biết cuộc gọi 'someAsynchronousFunction();' sẽ mất bao lâu. – msanford