मैं एक नोडजेएस फ्रेमवर्क से निपट रहा हूं जिसके लिए एक निश्चित फ़ंक्शन को सिंक्रोनस होना आवश्यक है, लेकिन मुझे उस मान को पुनर्प्राप्त करने की आवश्यकता है जिसे केवल अतुल्यकालिक रूप से एक्सेस किया जा सके। एक परिपूर्ण दुनिया में, मैं एक वादा वापस करने में सक्षम होगा, लेकिन मैं नहीं कर सकता।हल करने के लिए एक वादे का इंतजार कैसे करें?
एक त्वरित और गंदे समाधान के रूप में, मैं निम्न विधि बनाया:
exports.synchronizePromise = function(promise) {
var value;
promise.then(function(promiseValue) {
value = promiseValue;
});
while (!value) {} // Wait for promise to resolve
console.log("DONE: " + value); // Never reached
return value;
};
लेकिन मैं कोई त्रुटि मिलती है। क्या मुझे पूरा करने का कोई तरीका है?
वादे जादूगर रूप से चीजों को सिंक नहीं करते हैं, वे केवल कुछ एसिंक प्रक्रियाओं को कोड करने और कई चरणों के माध्यम से प्रबंधित करने में आसान बनाते हैं। फ्रीज करने का प्रयास करने के लिए लूप का उपयोग न करें, दो हिस्सों में जो भी सिंक हो रहा है उसे तोड़कर समस्या को अपस्ट्रीम ठीक करें। – dandavis
@ दंडवीस मैंने फ्रेमवर्क को प्रतिबद्ध करने पर विचार किया है जिसका उपयोग मैं इसे बनाने के लिए कर रहा हूं ताकि फ़ंक्शन एसिंक हो, लेकिन इसे कई जगहों और 99% समय में बुलाया जाता है, इसे एसिंक द्वारा आवश्यकता नहीं होती है। यह वास्तव में अपस्ट्रीम को ठीक करने का विकल्प नहीं है। –
आप प्रक्रिया को प्रेषित करने के तुरंत बाद एक guid वापस कर सकते हैं, और जब प्रक्रिया पूरी हो जाती है, तो अपने डेटा/डोम में ग्रिड ढूंढें और वास्तविक मान के लिए प्रतिस्थापित करें। – dandavis