6

फ्लैटमैप क्यों डाउनस्ट्रीम में कमी का कारण बनता है?आरएक्सजेएस कम नहीं रहता

मैं की तरह कोड मिला:

handleFiles.flatMap(files => 
    Rx.Observable.from(files). 
    flatMap((file, i) => fileReader(file, i)). 
    reduce((form, file, i) => { 
    form.append('file[' + i + ']', result); 
    console.log('reduce step', file); 
    return form; 
    }, new FormData()). 
    tap(console.log.bind(console, 'after reduce')) 
). 
subscribe(console.log.bind(console, 'response')); 

और समस्या यह है कि 'के बाद कम हो' नल मारा कभी नहीं रहा है। क्यूं कर?

लॉग की तरह है:

reduce step [data] 
reduce step [data] 

स्क्रीनशॉट:

Error screenshot

उत्तर

2

यदि फ़ाइलें एक सरणी है, तो फ़ाइल रीडर से लौटाए जाने पर अवलोकन को समाप्त करना चाहिए। तो इस कोड के लिए, समस्या यह थी कि फ़ाइल रीडर एक अवलोकन योग्य लौटा जो पूरा नहीं हुआ।

10

समस्या flatMap में नहीं है, यह reduce काम करता है।

reduce पूरी स्ट्रीम में पढ़ता है और इसे एक ही मान में कम कर देता है, केवल स्रोत स्ट्रीम बंद होने पर उत्सर्जित होता है। यदि आपकी from(files) स्ट्रीम समाप्त नहीं होती है, तो reduce कभी भी इसका मूल्य आउटपुट नहीं करेगा।

इसके बजाय scan का उपयोग करने का प्रयास करें; यह प्रत्येक मध्यवर्ती चरण को उत्सर्जित करता है और ऐसा लगता है कि आप क्या खोज रहे हैं।

+0

फ़ाइलें एक जेएस सरणी, सादा और सरल है। मैंने एक स्क्रीनशॉट जोड़ा। मैंने पहले स्कैन किया था और उसने काम किया था ... लेकिन चूंकि यह एक जेएस सरणी कुल पर पूर्ण होना चाहिए, है ना? – Henrik

+0

हालांकि, यह एक अच्छी पकड़ है। मुझे मेरी गलती मिली; फ़ाइल रीडर में विषय को पूरा नहीं कर रहा है। ओह! – Henrik

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