Không có điều gì như "lời hứa thực sự" hoặc "lời hứa giả". Có triển khai hứa hẹn rằng tuân thủ các tiêu chuẩn hiện hành và có triển khai hứa hẹn rằng không tuân thủ các tiêu chuẩn hiện hành. Không có thuộc tính vốn có của lời hứa nói rằng đó là "thực" hoặc "giả". Chúng là các bit của Javascript thực hiện một hành vi chuẩn.
Bất kỳ triển khai lời hứa nào tuân thủ nghiêm ngặt tiêu chuẩn sẽ là tốt để sử dụng và phải tương thích với các triển khai hứa hẹn chuẩn khác. Hầu hết sẽ xem xét khả năng tương tác và tuân thủ các tiêu chuẩn được chấp nhận một đặc tính hữu ích.
Bây giờ, các lời hứa của jQuery không tuân theo các tiêu chuẩn hứa hẹn, nơi mà một số người nói xấu về các lời hứa của jQuery. Họ dường như đang làm việc để làm cho họ tiêu chuẩn hơn cho một phiên bản tương lai của jQuery, nhưng họ hiện đang đi chệch khỏi các tiêu chuẩn theo nhiều cách. Điều này dẫn đến các vấn đề trong đó bạn phải viết mã khác nhau khi sử dụng các lời hứa jQuery hơn khi sử dụng các lời hứa tiêu chuẩn. Vì vậy, mã lời hứa jQuery không giống như mã lời hứa ES6.
vấn đề trong jQuery Promises
Xem this reference cho một danh sách các vấn đề với những lời hứa jQuery hiện hành. Hai vấn đề chính là vấn đề với việc xử lý lỗi trong các lời hứa bị từ chối và sự không thống nhất theo thứ tự thực hiện .then()
gọi lại có thể dẫn đến việc thực thi mã không thể đoán trước hoặc không nhất quán. Tất cả các trình xử lý .then()
được cho là sẽ được thực hiện không đồng bộ (sau khi chuỗi hiện tại của JS giải phóng). jQuery hứa hẹn không phải lúc nào cũng làm điều này và nó có thể gây ra vấn đề trong một số loại mã.
Nhà nước Promises Native trong trình duyệt
lời hứa Native là một điều hơi mới trong các trình duyệt, do đó, nó chưa phải là trường hợp đó bạn chỉ có thể dựa vào thực tế là tất cả các trình duyệt có thể nhấn trang web của bạn sẽ thiết Các lời hứa gốc được xây dựng trong các trình duyệt bắt đầu với Safari 7.1, Firefox 29, Chrome 32, Edge, Android 4.4.4, iOS 8.4 và chưa có trong IE (tính đến tháng 9 năm 2015). Vì vậy, bạn vẫn cần một trình duyệt khá gần đây để có hỗ trợ lời hứa gốc. Như vậy, có rất nhiều thư viện hứa hẹn tuyệt vời có thể cung cấp hoặc thay thế toàn bộ hoặc thay thế đầy đủ, do đó giúp mã của bạn có khả năng sử dụng lời hứa trong bất kỳ trình duyệt nào thực sự không thỏa hiệp so với lời hứa gốc.
Một số người có lẽ là đúng, nhưng đây không phải là cách hay để giải quyết tranh cãi. Súng ngắn vào lúc bình minh. – Pointy
Một số người bị nhầm lẫn, hoàn toàn vì IE không hỗ trợ javascript Promises và nó chưa trưởng thành. trong tương lai anh ta sẽ đúng. – Saar
@Pointy, lol, tôi đang tìm kiếm một câu trả lời hợp pháp (không cố gắng tranh luận về điều này). Nếu anh ta đúng, tôi muốn biết tại sao, và không dựa vào phản ứng khó hiểu của anh ta. – picokol