2017-11-28 14 views
5

मैं कोड बेस मैं वर्तमान के साथ काम कर रहा हूँ में निम्नलिखित देखा और यकीन नहीं है क्या यह की बात है:वादा करता है कि बस वापस आती है?

public spinnerPromise: Promise<void> = new Promise<void>(() => { return; });

वहाँ एक खाली वादा करने के लिए एक कारण है? यह मुझे setTimeOut(fn, 0) करने की याद दिलाता है और मुझे आश्चर्य है कि इसका एक समान प्रभाव है या नहीं।

धन्यवाद

उत्तर

4

संपादित

@Bergi के रूप में बताया, यह देखते हुए वादा कभी नहीं पूरा करता है के रूप में कोई भी संकल्प कहते हैं। तो प्रश्न में वादा कभी भी परिणाम के लिए इंतजार कर किसी को भी कॉल नहीं करेगा।

एक setTimeOut(fn, 0) के लिए एक वादा बराबर होगा:

var spinnerPromise: Promise<void> = new Promise<void>(resolve => resolve()); 

मूल

हाँ प्रभाव समान है। Promisespecification जनादेश देता है कि भले ही Promise पूर्ण स्थिति में है, हैंडलर पंजीकृत होने पर किसी भी हैंडलर को सही नहीं कहा जाएगा। यह केवल तब कॉल किया जाएगा जब वर्तमान कॉल निष्पादित किया जाता है।

spinnerPromise.then (()=> { /* Code called later */ }); 
// Code called after call to then 
+0

मुझे कमजोर होने पर कोई फर्क नहीं पड़ता, लेकिन क्या डाउनवॉटर एक कारण प्रदान कर सकता है? अगर जवाब गलत है तो मैं जानना चाहता हूं। –

+2

ओपी का वादा पूरा राज्य में कभी नहीं मिलता है। – Bergi

+1

@ बर्गि हाँ आप सही हैं, मेरे बुरे, मुझे याद आया, मैं इस वादे के बारे में सोच रहा था जो इस नए वादे (आर => आर()) की तरह दिखता है। –

3

वहाँ एक खाली वादा करने के लिए एक कारण है?

मैं कई लोगों के बारे में नहीं सोच सकता। एक उपयोग केस एक मान के रूप में होगा जो आप Promise.race पर जा सकते हैं और उम्मीद करते हैं कि यह हमेशा दूसरी पसंद ले।

Are JavaScript forever-pending promises bad? और Is it safe to not resolve or reject a promise पर एक नज़र डालें।

यह मुझे setTimeOut(fn, 0) करने की याद दिलाता है और मुझे आश्चर्य है कि इसका एक समान प्रभाव है या नहीं।

नहीं, बिलकुल नहीं। setTimeout अंततः कॉलबैक को कॉल करेगा, लेकिन new Promise(() => {}).then(…) कभी नहीं होगा। यह Infinity से setTimeout (जो doesn't really work in reality) पास करने के समान है।

आप Promise.resolve().then(…) या new Promise(r => r()).then(…) के बारे में सोच रहे होंगे, जो तुरंत कॉलबैक फ़ंक्शन को कॉल करेगा लेकिन असीमित रूप से।

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