(Bỏ qua WebWorkers) JavaScript chạy trên một chuỗi duy nhất, vì vậy bạn có thể chắc chắn rằng mã 2 sẽ luôn thực thi sau mã1.
Trừ code1 bạn làm điều gì đó không đồng bộ như một cuộc gọi Ajax hoặc một setTimeout()
, trong trường hợp này xử lý nhấp chuột của bẫy sẽ hoàn thành, sau đó code2 sẽ thực hiện, sau đó (cuối cùng) gọi lại từ cuộc gọi Ajax (hoặc setTimeout()
, hoặc bất cứ điều gì) sẽ chạy.
EDIT: Đối với câu hỏi được cập nhật, mã 2 sẽ luôn thực thi trước mã1, vì như tôi đã nói ở trên, một cuộc gọi lại async Ajax sẽ xảy ra sau (ngay cả khi phản hồi Ajax rất nhanh, nó sẽ không gọi lại cho đến khi JS hiện tại kết thúc).
"Làm thế nào tôi chắc chắn rằng code2 thực thi sau khi code1 thực hiện"
Sử dụng .click()
không có params là một phím tắt để .trigger("click")
, nhưng nếu bạn thực sự gọi .trigger()
rõ ràng bạn có thể cung cấp các thông số bổ sung mà sẽ được chuyển đến trình xử lý, cho phép bạn thực hiện việc này:
$(".elem").click(function(e, callback) {
$.post("page.php".function(){
//code1
if (typeof callback === "function")
callback();
});
});
$(".elem").trigger("click", function() {
// code 2 here
});
Tức là, trong thử nghiệm xử lý nhấp chuột cho dù một hàm đã được chuyển trong tham số callback
và nếu có thì hàm đó vẫn được gọi. Điều này có nghĩa là khi sự kiện xảy ra "tự nhiên" sẽ không có gọi lại, nhưng khi bạn kích hoạt nó theo chương trình và truyền một hàm thì hàm đó sẽ được thực hiện. (Lưu ý rằng tham số mà bạn vượt qua với .trigger()
không phải là một chức năng, nó có thể là bất kỳ loại dữ liệu nào và bạn có thể chuyển nhiều thông số, nhưng với mục đích này, chúng tôi muốn có một chức năng.)
Demo: http://jsfiddle.net/nnnnnn/ZbRJ7/1/
Vui lòng xác định ý nghĩa của bạn bằng "mã 1 thực hiện". Mã của bạn có phương thức ajax. Vì vậy, bạn có nghĩa là khi cuộc gọi ajax executes hoặc ajax executes và hoàn thành là tốt? – Rahatur