Nếu tôi có một hàm thỉnh thoảng trả về một đối tượng trì hoãn nhưng đôi khi một đối tượng không được hoãn lại. Làm sao tôi có thể biết nó là cái gì?Làm cách nào để xác định xem đối tượng jQuery có bị trì hoãn không?
Trả lời
Tùy thuộc vào trường hợp sử dụng của bạn, bạn cũng có thể sử dụng jQuery.when
[1]:
Nếu một đối số duy nhất được truyền cho
jQuery.when
và nó không phải là một thu nhập hoãn lại, nó sẽ được coi như một giải quyết thu nhập hoãn lại và bất kỳ thẻ được thực hiện nào được đính kèm sẽ được thực thi ngay lập tức.
Với jQuery.when
bạn có thể đối xử với đối tượng bí ẩn của bạn luôn luôn như trì hoãn:
// x could be a deferred object or an immediate result
var x = getMysteriousObject();
// success will be called when x is a deferred object and has been resolved
// or when x is an immediate result
jQuery.when(x).then(success, error);
Câu trả lời rất hữu ích, cảm ơn bạn! – nrodic
Trình xử lý 'thành công' của bạn sẽ không có các đối số khác nhau được truyền cho nó - tùy thuộc vào đối tượng có bị trì hoãn hay không? Trong trường hợp đó bạn vẫn sẽ phải sử dụng kiểu gõ vịt như những gì được đề xuất bên dưới. – backdesk
@Crungmungus: "Nếu một đối số duy nhất được chuyển đến jQuery.when và nó không phải là Trì hoãn hoặc Lời hứa, nó sẽ được coi là Trì hoãn đã giải quyết và mọi thẻ được thực hiện kèm theo sẽ được thực thi ngay lập tức. " –
Vì jQuery Deferred được tạo bằng cách sao chép các phương thức của đối tượng ẩn thay vì gọi toán tử mới trên một hàm, bạn không thể chứng minh rằng đối tượng thực sự là một thể hiện của jQuery.Deferred. Tôi nghĩ rằng bạn sẽ cần phải đi với Duck-Typing:
"Khi tôi nhìn thấy một con chim đi như vịt và bơi như vịt và quacks như vịt, tôi gọi đó là một con vịt." - James Whitcomb Riley
Tùy thuộc vào những gì đối tượng khác có thể được trả lại (những gì thuộc tính phải được dự kiến), kiểm tra xem các thuộc tính đặc biệt/phương pháp được trình bày:
var x = getMysteriousObject();
if (x.promise) {
// Deferred
} else {
// Not a deferred
}
Bạn có thể trình bày chi tiết việc kiểm tra này nếu có yêu cầu :
if ($.isFunction(x.promise)) {
// Deferred
}
hoặc (để phân biệt giữa các đối tượng thu nhập hoãn lại và triển khai khác của giao diện Promise)
if (x.promise && x.resolve) {
// Deferred
}
Ok, sau đó tôi nghĩ rằng gõ vịt là cách tốt nhất để đi. Đã lo lắng về việc có được một con chim cút thay vì một con vịt. Bây giờ nghĩ rằng điều đó không quan trọng. Cảm ơn nhiều! – WawaBrother
Lấy cảm hứng từ Niko's answer, tôi đã tạo ra một thực hiện mà sẽ kiểm tra nếu một đối tượng là một trì hoãn dựa trên tên thuộc tính của nó nhưng cũng là về nội dung của các thuộc tính đó. Tôi phải làm như vậy vì một vật thể khác của tôi có một tài sản có tên là lời hứa.
if (typeof value.resolve !== "function") {
return false;
}
return String(value.resolve) === String($.Deferred().resolve);
- 1. Làm cách nào để trì hoãn CABasicAnimation?
- 2. Làm cách nào để chuỗi chuỗi các hàm bị trì hoãn trong jQuery 1.8.x?
- 3. Làm thế nào để trì hoãn Jquery UIBlock Plugin?
- 4. jQuery .delay() không trì hoãn hàm .html()
- 5. Làm thế nào để trì hoãn hoạt ảnh jquery?
- 6. Thực hiện đối tượng Trì hoãn mà không cần sử dụng jquery
- 7. Tắt ACK bị trì hoãn TCP
- 8. C++ bị trì hoãn nhiệm vụ
- 9. Làm thế nào để kiểm tra xem một biến hoặc đối tượng là không xác định?
- 10. Xử lý các mảng của các đối tượng trì hoãn
- 11. Làm cách nào để duy trì hoạt động trì hoãn LINQ?
- 12. Làm thế nào để trì hoãn Default.png?
- 13. liên tục bị trì hoãn uninitialized :: Job
- 14. Đối tượng động - Cách xác định xem thuộc tính có được xác định không?
- 15. Làm cách nào để trì hoãn giữa 2 hoạt ảnh?
- 16. Đánh giá bị trì hoãn ở Clojure
- 17. Gửi văn bản bị trì hoãn?
- 18. Việc tải biểu tượng đã xuất có bị trì hoãn không?
- 19. C# Lambdas: Làm thế nào * Không * để trì hoãn "Dereference"?
- 20. Làm cách nào để trì hoãn sự kiện trong xcode?
- 21. Làm cách nào để trì hoãn biểu mẫu gửi
- 22. Xác định lý do cho quá trình bị trì hoãn trên Linux
- 23. Làm cách nào để xác định xem thiết bị đầu cuối có đủ màu không?
- 24. Làm cách nào để xác thực xem cột có tồn tại trong đối tượng DataRow không?
- 25. Làm cách nào để hủy hoạt động MoveFileEx bị trì hoãn?
- 26. Box2d: mousejoint mà không bị trì hoãn quán tính
- 27. Làm cho jQuery hoãn lại/Promises và AngularJS $ q Trì hoãn/Hứa hẹn tương thích
- 28. Làm thế nào để trì hoãn ngAnimate trong ngRepeat
- 29. Làm cách nào để xác định đối tượng jQuery trong bản ghi?
- 30. Jquery trì hoãn sau khi Bấm
"Kiểm tra loại" ngụ ý các khía cạnh khác :) –
Làm thế nào để bạn trì hoãn? – alexn
đẹp, có cùng một vấn đề ở đây –