मैं एक स्ट्रीम का उपयोग कर रहा हूं जो खिड़की को स्क्रॉल करते समय थ्रॉटल किया जाता है।
थ्रॉटलिंग (जब तक स्क्रॉलिंग तक), यह कंसोल के मानों को छोड़ देता है।आरएक्सजेएस - निष्क्रिय होने पर केवल टाइमर शुरू करें?
हालांकि, जब धारा खाली है (उपयोगकर्ता नहीं खिड़की स्क्रॉल है) - मैं एक टाइमर में लात करना चाहते हैं हालांकि -। यदि उपयोगकर्ता फिर से स्क्रॉल शुरू होता है - मुझे लगता है कि टाइमर मूल्यों का उत्सर्जन नहीं करना चाहती।
वर्तमान में मैं यह कर रहा हूँ:
const observable = Rx.Observable.fromEvent(window, 'scroll');
const subscriber = observable
.throttleTime(300)
.map(() => 'throttle')
.merge(Rx.Observable.interval(1000).map(() => 'tick'))
.subscribe(
(x) => {
console.log('Next: event!', x);
},
(err) => {
console.log('Error: %s', err);
},
() => {
console.log('Completed');
});
समस्या यह है कि, स्क्रॉल करते हुए है - मैं देख रहा हूँ दोनों "throttle"
और "tick"
(मैं केवल "थ्रॉटल" देखना चाहिए) दूसरे से इस बात का
Think पीओवी। नौकरी हमेशा चलनी है। अगर मैं स्क्रॉल करता हूं - वह थ्रॉटल स्क्रॉल - नौकरी का आह्वान करना चाहिए। अगर मैं स्क्रॉल नहीं करता - एक टाइमर को लात मारना चाहिए और नौकरी करना शुरू करना चाहिए। (और यदि उपयोगकर्ता फिर से स्क्रॉल करना शुरू करता है तो रोकता है)।
प्रश्न:
मैं कैसे स्क्रॉल नहीं की एक निष्क्रिय समय के बाद एक टाइमर शुरू कर सकते हैं?
यह कैसे इतने पर एक अच्छा सवाल बनाना है। +1 –
पुन [आपकी अन्य टिप्पणी] (http://stackoverflow.com/questions/41522222/making-a-typing-timer-in-rxjs-tracking-time-spent-typing/41526650?noredirect=1#comment74109988_41526650) : आप स्क्रॉल का उपयोग करने के लिए 'exhaustMap' +' debounceTime' का उपयोग करके इस चाल का उपयोग करके इसे हल कर सकते हैं।मैंने 'स्विचमैप' के साथ यहां क्या किया है क्योंकि हम घटनाओं के विस्फोट के दौरान कुछ नहीं करते हैं और जब स्ट्रीम निष्क्रिय होती है तो काम होता है। दूसरी तरफ, 'स्विचमैप' प्रत्येक बार एक नई स्क्रॉल इवेंट उत्सर्जित होने पर नौकरी (टाइमर) को पुनरारंभ करेगा। – Dorus