नहीं, ऐसा करने का कोई और तरीका नहीं है - केवल एक चीज मैं कह सकता हूं कि यह उपयोग मामला बहुत सामान्य नहीं है। जैसे फेलिक्स ने टिप्पणी में कहा - आप जो करते हैं वह लगातार काम करेगा।
यह ध्यान देने योग्य है कि वादे का निर्माण करने वाला इस तरह से व्यवहार करता है, यह सुरक्षा फेंकना है - यदि आप अपवाद का अनुमान नहीं लगाते हैं, जबकि आपका कोड वादा निर्माता के अंदर चल रहा है तो यह अस्वीकृति में बदल जाएगा, फेंक सुरक्षा का यह रूप - फेंक दिया त्रुटियों को परिवर्तित करना अस्वीकृति महत्वपूर्ण है और पूर्वानुमान कोड बनाए रखने में मदद करती है।
इस थ्रो सेफ्टी कारण के लिए, वादा कंस्ट्रक्टर को डिफर्ड के लिए चुना गया था (जो कि एक वैकल्पिक वादा निर्माण तरीका है जो आप जो कर रहे हैं उसकी अनुमति देते हैं) - सर्वोत्तम प्रथाओं के लिए - मैं तत्व को पास करूंगा और इसके बजाय वादे कंस्ट्रक्टर का उपयोग करूंगा:
var p = new Promise(function(resolve, reject){
this.onclick = resolve;
}.bind(this));
इस कारण से - जब भी आप फ़ंक्शंस के निर्यात पर वादे करने वाले कंस्ट्रक्टर का उपयोग कर सकते हैं - मेरा सुझाव है कि आप इसका उपयोग करें। जब भी आप दोनों से बच सकते हैं - दोनों और श्रृंखला से बचें।
ध्यान दें, आपको कभी भी चीजों के लिए वादे के निर्माणकर्ता का उपयोग नहीं करना चाहिए if(condition)
, पहला उदाहरण इस प्रकार लिखा जा सकता है:
var p = Promise[(someCondition)?"resolve":"reject"]();
Promise
को दो कार्यों को "निर्यात" करने की अनुमति देने के लिए समान रूप से निष्पादित किया जाना है।