Tin vui. Kể từ hôm qua, bạn có thể hủy lời hứa của mình.
Tôi đã xuất bản phiên bản mới của plugin nhỏ jquery-timing cung cấp hai phương thức trong số nhiều phương thức khác được gọi là .wait() và .unwait().
var deferred = $("#box").delay(2000).show("slow").delay(2000).promise();
$.wait(deferred, function(){ log("Done"); });
Nếu sau đó bạn muốn hủy đăng ký gọi lại:
$.unwait();
Những phiên bản tĩnh của chờ đợi và unwait cũng hỗ trợ một tên nhóm tùy chọn để không hủy bỏ bất kỳ xử lý nhưng chỉ có một tập hợp cụ thể.
Bên cạnh đó bạn có thể làm được rất nhiều thứ thông minh hơn như:
$('#box').wait(deferred).addClass('ready');
hoặc toàn bộ mã trong một chuỗi, không lựa chọn unwait:
$("#box").delay(2000).show("slow")
.delay(2000).join(function(){log("Done");})).addClass('ready');
hoặc cùng thậm chí ngắn hơn với tùy chọn để hủy hai lần tạm dừng:
$("#box").wait(2000).show("slow",$)
.wait(2000, function(){log("Done");})).addClass('ready');
Chỉ cần xem tài liệu, ví dụ và API phù hợp nhất với bạn.
Nếu bạn chỉ có đối tượng lời hứa (và không có quyền truy cập vào trì hoãn ban đầu), thì không thể thực hiện điều đó. Ý tưởng về lời hứa là có thể lắng nghe sự trì hoãn được giải quyết hoặc từ chối, mà không có chức năng giải quyết/từ chối. Những gì bạn có thể làm là tạo ra một wrapper lời hứa cho thấy functons lời hứa ban đầu, nhưng tất cả các callback được liên kết với một hàm bao gói để nghe một số loại cờ để tránh kích hoạt gọi lại nếu hoãn lại bị gắn cờ là bị hủy bỏ. –
gần như, bạn thực sự chỉ muốn tạo ra một từ chối và tự từ chối hoặc giải quyết nó như thế nào bạn thấy phù hợp. –