2015-09-28 10 views
7

जावास्क्रिप्ट वादे बनाम jQuery डिफर्ड ऑब्जेक्ट्स के पेशेवरों & विपक्ष क्या हैं?जावास्क्रिप्ट वादा बनाम jQuery डीफर्ड

उदाहरण के लिए, प्रत्येक के पास क्या समस्याएं हैं, यदि कोई हों तो?

एक साथी ढेर अतिप्रवाह सदस्य ने कहा:

"... असली वादों असली हैं, और नकली वादों नकली हैं।"

इसका क्या मतलब था?

+0

कुछ लड़का शायद सही है, लेकिन यह तर्क को सुलझाने का एक अच्छा तरीका नहीं है। सुबह पिस्तौल। – Pointy

+0

कुछ लड़का गलत है, चूंकि आईई जावास्क्रिप्ट वादे का समर्थन नहीं करता है और यह अभी तक परिपक्व नहीं है। भविष्य में वह सही होगा। – Saar

+0

@ पॉइंटी, लॉल, ठीक है, मैं वैध रूप से एक उत्तर की तलाश में हूं (इस पर बहस करने की कोशिश नहीं कर रहा हूं)। यदि वह सही है, तो मैं जानना चाहता हूं कि क्यों, और उसकी गुप्त प्रतिक्रिया पर भरोसा नहीं है। – picokol

उत्तर

9

"असली वादा" या "नकली वादा" जैसी कोई चीज़ नहीं है। वादे कार्यान्वयन हैं कि वर्तमान मानकों का पालन करें और वादा कार्यान्वयन हैं कि वर्तमान मानकों का पालन न करें। एक वादे का कोई अंतर्निहित गुण नहीं है जो कहता है कि यह "वास्तविक" या "नकली" है। वे जावास्क्रिप्ट के बिट्स हैं जो एक मानक व्यवहार को लागू करते हैं।

कोई भी वादा कार्यान्वयन जो कठोर रूप से मानक का पालन करता है, उपयोग करने के लिए ठीक होना चाहिए और अन्य मानक वादे कार्यान्वयन के साथ अंतःक्रियात्मक होना चाहिए। अधिकांश स्वीकार्य मानकों को एक उपयोगी विशेषता के अंतःक्रियाशीलता और अनुपालन पर विचार करेंगे।

अब, jQuery वादे वादे मानकों का पालन नहीं करते हैं, जहां कुछ लोग jQuery वादों से बुरा बात करते हैं। वे स्पष्ट रूप से jQuery के भविष्य के संस्करण के लिए उन्हें अधिक मानक बनाने पर काम कर रहे हैं, लेकिन वे वर्तमान में कई तरीकों से मानकों से विचलित हो जाते हैं। यह मानकों के वादे का उपयोग करते समय jQuery वादे का उपयोग करते समय आपको अलग-अलग कोड करना पड़ता है। तो jQuery वादा कोड ES6 वादा कोड के समान नहीं दिखता है। jQuery में

समस्याएं वादे

वर्तमान jQuery वादे के साथ समस्याओं की एक सूची के लिए this reference देखें। दो मुख्य वाले अस्वीकृत वादे में त्रुटि प्रबंधन के साथ समस्या और .then() कॉलबैक निष्पादन आदेश में एक असंगतता है जो अप्रत्याशित या असंगत कोड निष्पादन का कारण बन सकती है। सभी .then() हैंडलर को एसिंक निष्पादित किया जाना चाहिए (जेएस के मौजूदा धागे के बाद)। jQuery वादे हमेशा ऐसा नहीं करते हैं और यह किसी प्रकार के कोड में समस्याएं पैदा कर सकता है।

ब्राउज़र में मूल निवासी वादे के राज्य

मूल निवासी वादों ब्राउज़रों में कुछ हद तक एक नई बात कर रहे हैं, तो यह अभी तक मामला है कि आप बस तथ्य यह है कि सभी ब्राउज़रों कि जरूरी होगा अपनी साइट को हिट कर सकते हैं पर भरोसा कर सकते नहीं है मूल वादे किए गए हैं। मूल वादे सफारी 7.1, फ़ायरफ़ॉक्स 2 9, क्रोम 32, एज, एंड्रॉइड 4.4.4, आईओएस 8.4 से शुरू होने वाले ब्राउज़र में बनाए गए हैं और अभी तक आईई (सितंबर, 2015 तक) में उपलब्ध नहीं हैं। इसलिए, आपको देशी वादे समर्थन के लिए अभी भी एक बिल्कुल हालिया ब्राउज़र की आवश्यकता है। ऐसे में, कई उत्कृष्ट वादे पुस्तकालय हैं जो या तो पॉलीफिल या पूर्ण-प्रतिस्थापन प्रदान कर सकते हैं, इस प्रकार आपके कोड को किसी भी ब्राउज़र में वास्तव में कोई समझौता बनाम मूल वादे के साथ वादे का उपयोग करने की क्षमता प्रदान नहीं कर सकते हैं।

+0

मुझे यह पसंद है अगर इसमें माइक्रोसॉफ्ट के नए एज सहित अब अधिकांश ब्राउज़रों में जावास्क्रिप्ट वादे मूल कैसे हैं, इस बारे में कुछ टिप्पणी शामिल है, हालांकि, पुराने ब्राउजर संगतता (आईई) के साथ हमेशा समस्याएं रहेंगी। इसके अलावा, मुझे लगता है कि यह मेरे प्रश्न का अच्छा जवाब है। – picokol

+0

@picokol - मैंने ब्राउज़र में देशी वादों की स्थिति पर एक टिप्पणी जोड़ा। – jfriend00

3

जावास्क्रिप्ट वादे बेहतर हैं क्योंकि यह मानक के अनुरूप है। एक दिन वे सभी ब्राउज़रों पर मूल रूप से उपलब्ध होंगे। अब के लिए आप आज ईएस 6 वादे का उपयोग करने के लिए बेबेल जैसे कुछ का उपयोग कर सकते हैं: https://babeljs.io/docs/learn-es2015/#promises

संबंधित मुद्दे