इस तरह ऑब्जेक्ट देखकर ऑब्जेक्ट करता है।
पर्यवेक्षक केवल को रिकॉर्ड के संग्रह के साथ के अगले टिक पर आग लगाएगा। यह व्यक्तिगत परिवर्तनों पर सिंक्रनाइज़ नहीं होता है क्योंकि वे बनाए जाते हैं। Object.Observe Synchronous Callback भी देखें।
आप जो चाहते हैं उसे पूरा करने के लिए, एक दृष्टिकोण आपके इटरेटर को फिर से लिखना है ताकि यह प्रत्येक बार लूप के माध्यम से Object.observe
को आग लगाने का मौका दे सके। मैं जरूरी इस सटीक तरीका नहीं की सिफारिश कर रहा हूँ, लेकिन सिर्फ एक उदाहरण के रूप:
function iterate(a, fn) {
(function loop() {
if (!a.length) return;
fn(a.shift());
setTimeout(loop);
})();
}
अब, fn
द्वारा निरीक्षण वस्तु पर किए गए गुण में कोई परिवर्तन पाश की कि यात्रा के दौरान सूचित किया जाएगा।
आप वादों का उपयोग कर एक ही बात को पूरा कर सकते:
function iterate(a, fn) {
a.reduce((p, e) => p.then(() => fn(e)), Promise.resolve());
}
आप (यह एक ES7 सुविधा है, लेकिन इस तरह के कोलाहल के रूप में transpilers में उपलब्ध) एक async/इंतजार वातावरण में होना करने के लिए होता है, तो आप कर सकते थे भी निम्नलिखित है, जो कवर के तहत बारे में वादे के बराबर है ऊपर दृष्टिकोण है: एक तरफ
async function iterate(a, fn) {
for (i of a) await fn(i);
}
एक के रूप में, आप एक Iife यहां जरूरत नहीं है। इसके अलावा, self
घोषित नहीं किया गया है - मुझे self.progress = M.progress
लाइन पर रन-टाइम त्रुटि की उम्मीद है।
स्रोत
2015-03-30 06:24:38
इसका वास्तव में मॉड्यूल के साथ कुछ लेना देना नहीं है, इसलिए आप अपने प्रश्न का शीर्षक बदलने के बारे में सोचना चाहेंगे। –
यदि आप सिंक व्यवहार चाहते हैं, तो आप ऑब्जेक्ट.बॉर्स्क को मार सकते हैं और इसके बजाय गेटर/सेटर का उपयोग कर सकते हैं, कुछ कम पुराने-पुराने लेकिन http://jsfiddle.net/g35orqrq/ – dandavis