2016-08-04 18 views
8

हम Promise.resolve(value) के साथ-साथ Promise.resolve(promise) पर कॉल कर सकते हैं। मैं समझ सकता हूं कि मुझे पहले कॉल का उपयोग कैसे करना चाहिए और मुझे दूसरे के बारे में निश्चित नहीं है।Promise.resolve (वादा) का उपयोग केस क्या है?

क्यों पहली जगह में तर्क के रूप में वादा का उपयोग न करें? मैं बुला मतलब:

promise1.then()

बजाय

:

Promise.resolve (promise1) तो फिर()

?

उत्तर

5

Promise.resolve मूल रूप से "मुझे परवाह नहीं है कि यह क्या है, मुझे एक वादा दें"। आम तौर पर, जब भी आपको कोई तर्क मिलता है कि एक वादा हो सकता है Promise.resolve इसके साथ काम करने का सही तरीका है (बनाम यह एक वादा को स्पष्ट रूप से पहचान रहा है)।

  • विभिन्न पुस्तकालयों से विदेशी वादे के साथ कार्य करना:

    यह के लिए उपयोगी है।

  • उन मानों के साथ काम करना जो वादे हो सकते हैं और सादे मूल्य हो सकते हैं।

यह भी वादे के साथ बहुत कुछ कहलाता है।

  • जब आप Promise.all या Promise.race करने के लिए मिश्रित वादे, विदेशी "thenables" और मूल्यों की एक सरणी पारित - यह परोक्ष Promise.resolve रों सभी मूल्यों।
  • इसी तरह, जब आप एक विदेशी "तत्काल" या Promise#then(...) से मान वापस करते हैं तो यह Promise.resolve पर कॉल करेगा।
  • जब आप await एक मान Promise.resolve पर स्पष्ट रूप से बुलाया जाता है।

और इसी तरह।

+0

तो अगर मैं इसे सही ढंग से समझ रहा हूं, तो 'हल' मूल रूप से एक झूठ है, क्योंकि लौटाया गया वादा हल नहीं होता है। यह चालू होने तक वर्तमान धागे में निष्पादन को अवरुद्ध नहीं करता है। एक बार एपीआई के बाद मुझे एक वादा वापस करने की आवश्यकता होती है, तो लौटने से पहले इसे निष्पादित करने के लिए मजबूर करने का कोई तरीका नहीं है। 10 या उससे अधिक बार यह पूछे जाने पर, आपका उत्तर पहला ऐसा है जो वास्तव में इसका उत्तर देने के करीब आता है। – coladict

+0

@coladict 'resol' का अर्थ है "इस वचन का भाग्य किसी चीज़ द्वारा हल किया गया है", "परिष्करण" के वादे को पूरा करने (सफलतापूर्वक) या अस्वीकार कर दिया गया है (असफल)। जब आप 'Promise.reject' (यहां तक ​​कि एक और वादे के साथ भी आप इसे अस्वीकार कर दिया गया है (और यह "समाप्त हो गया है) में है लेकिन वादा करने के लिए कोई रास्ता नहीं है (डिज़ाइन द्वारा)" ब्लॉक "और प्रतीक्षा करें (क्षमा करें!) चूंकि यह अच्छी तरह से काम नहीं करेगा (प्रभावी रूप से वेब पेज या नोड प्रक्रिया को ठंडा कर रहा है)। –

3

यदि आपके पास कोई मान है कि एक वादा हो सकता है, Promise.resolve बहुत अच्छा है।

इस कार्यक्रम में कि मैं अभी काम कर रहा हूं, मेरे पास कई इनपुट हैं जो विभिन्न इनपुट को संभालने के लिए कॉलबैक के साथ यूआई घटक बनाते हैं। कुछ बार, उन कॉलबैक को वादे वापस करने की ज़रूरत होती है, कभी-कभी वे नहीं करते हैं। कॉलबैक पर ऑनस डालने की बजाय, मैं हमेशा Promise.resolve में वापसी मान लपेटता हूं और समस्या हल करता हूं।

3

हैं promise1, वास्तव में एक वादा है, तो इस संरचना करने के लिए इस्तेमाल किया जा सकता है एक वादा से परिवर्तित एक अलग पुस्तकालय का एक और एक करने के लिए करता है, तो Promise उदा है var Promise = require('bluebird');

के रूप में परिभाषित किया गया है उपयोगी अगर आप jQuery के पुराने संस्करण का उपयोग करते हैं जहां कार्यों से लौटाई गई वस्तु ऑब्जेक्ट ईएस 6 अनुरूप वादे की तरह व्यवहार नहीं करती है।

या यदि आप ब्लूब्रिड जैसी लाइब्रेरी के साथ मूल ES6 वादा का उपयोग करना चाहते हैं जिसमें अधिक सुविधाएं हैं।

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