2015-06-24 14 views
6

में वैकल्पिक पहला वादा मेरे पास 2 $ http कॉल हैं जो वादे वापस करते हैं लेकिन पहला विकल्प वैकल्पिक है। मेरा मानना ​​है कि मुझे पहले $q.defer() का उपयोग करके एक वादा बनाना है, लेकिन मुझे कुछ याद आ रहा है।कोणीय श्रृंखला

यहाँ मेरी गैर काम कर रहे प्रयास है:

var p = $q.defer(); 
if (condition) { 
    p = p.then(doOptionalFirst()); 
} 
return p.then(doOther()); 

श्रृंखला के लिए सही सिंटैक्स पहले वैकल्पिक होने के साथ इन 2 कॉल क्या है?

उत्तर

5

पहले से ही हल किए गए वादे को बनाने के लिए $q.when (या $q.resolve AngularJS 1.4.1 के साथ) का उपयोग करें।

var p = $q.resolve(); 
if (condition) { 
    p = p.then(doOptionalFirst); 
} 
return p.then(doOther); 

आप उपयोग कर रहे हैं एक आस्थगित, आप .promise के लिए श्रृंखला के लिए है और फिर उपयुक्त समय पर स्थगित कर हल। इस मामले में आप विचार कर सकते हैं कि यदि condition सत्य है तो स्थगित स्वचालित रूप से हल हो जाता है। इस प्रकार आप पहले से ही हल किए गए वादे का उपयोग करके कुछ अतिरिक्त संभावित भ्रमित कोड छोड़ सकते हैं।

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