2013-05-24 11 views
17

मेरे पास ऐसे वादे की एक श्रृंखला में एक कार्य है जो कुछ कर सकता है या नहीं कर सकता है। जैसेएक खाली वादा बनाएँ

getYear().then(function(results){ 
    if(results.is1999) return party(); 
    else return Q.fcall(function(){/*do nothing here*/}); 
    }).then(sleep) 

कहाँ getYear, party, और sleep सभी वापसी का वादा किया। क्या कोई अन्य कथन लिखने का एक और संक्षिप्त तरीका है? यही है, कुछ भी नहीं, लेकिन अभी भी एक श्रृंखला योग्य वादा वापस?

+0

'वापसी पार्टी 'या' वापसी पार्टी() '? –

+0

धन्यवाद @ बीटरूट-बीटरूट। फिक्स्ड। – prauchfuss

+0

मैंने माना है कि पार्टी एक ऐसे कार्य के बजाए सिर्फ एक वादा मूल्य था जिसने वादा किया था। मैंने यह भी माना था कि इससे कोई फर्क नहीं पड़ता क्योंकि यह उदाहरण दिखाने के लिए सिर्फ कोड था। मुझे अब यह मानने के लिए मजबूर होना पड़ता है कि आप वास्तव में एक कार्यक्रम तैयार कर रहे हैं जो एक पार्टी फेंकता है, लेकिन केवल 1 999 है। – ForbesLindesay

उत्तर

26

हां। Q(value)value के लिए एक वादा देता है (यदि value एक वादा है तो यह मान को भी अनचाहे करता है)।

getYear().then(function(results){ 
    if(results.is1999) return party(); 
    else return Q(undefined); 
    }).then(sleep) 

वैकल्पिक रूप से, अगर आप अभी वापस नहीं कुछ भी द्वारा ठीक उसी अर्थ विज्ञान प्राप्त कर सकते हैं:

getYear().then(function(results){ 
    if(results.is1999) return party(); 
    }).then(sleep) 

क्या आप एक वादा है कि कभी नहीं हल किया था चाहता था, तो आपका सर्वश्रेष्ठ दांव होगा

getYear().then(function(results){ 
    if(results.is1999) return party(); 
    else return Q.promise(function() {}); 
    }).then(sleep) 

आप क्या कर सकते हैं वही वचन दोबारा उपयोग करें:

var stop = Q.promise(function() {}); 
    getYear().then(function(results){ 
    if(results.is1999) return party(); 
    else return stop 
    }).then(sleep) 
+0

"एक वादा जिसे कभी हल नहीं किया गया" से आपका क्या मतलब है? क्या इसका वादा करने के लिए कोई फायदा है जो मूल्य (कहता है, 'परिणाम') देता है? –

+0

@ पैट्रिक वादा तीन राज्यों में से एक में हो सकता है: लंबित, पूर्ण और अस्वीकृत। आप हमेशा के लिए "लंबित" राज्य में एक वादा रह सकते हैं। मेरा यही मतलब है "एक वादा जिसे कभी हल नहीं किया जाता है"। मैं कहूंगा कि आम तौर पर यह एक विरोधी पैटर्न है, लेकिन यह उपयोगी हो सकता है यदि आप किसी दिए गए फ़ंक्शन के बाद होने वाले सभी तर्कों को रोकना चाहते हैं। यह आपको वास्तव में, सभी सफल हैंडलर और सभी विफलता हैंडलरों को श्रृंखला के नीचे छोड़ने की अनुमति देता है। हालांकि शायद यह सबसे अच्छा बचा है। – ForbesLindesay

+0

हाँ, यह एक बुरा विचार प्रतीत होता है। उदाहरण में यह क्या है जो वादे को कभी पूरा नहीं करता है? क्योंकि अंतिम '.थ (नींद)' एक वादा देता है जो कभी भी कुछ भी सौंपा नहीं जाता है? (और इस प्रकार '.then''ed या' .done''ed नहीं किया जा सकता है?) –

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