मैं RxJS के लिए नया हूँ और मैं एक ऐप्लिकेशन है जो निम्नलिखित चीजों को पूरा करेगा लिखने के लिए कोशिश कर रहा हूँ का उपयोग कर लगातार अपडेट की रिकॉर्ड के लिए जाँच करने के लिए एक API मतदान करने के लिए कैसे: प्रस्तुत होने परRxJS, एक गतिशील टाइमस्टैम्प
- , बनाना वस्तुओं की एक सूची लाने के लिए एक AJAX अनुरोध (सादगी के लिए
fetchItems()
के रूप में faked)। - इसके बाद हर दूसरे, आइटम प्राप्त करने के लिए AJAX अनुरोध करें।
- नई वस्तुओं की जांच करते समय, सबसे हालिया टाइमस्टैम्प को वापस करने के बाद केवल आइटम बदल दिए जाते हैं।
- अवलोकनों के बाहर कोई भी राज्य नहीं होना चाहिए।
मेरे first attempt बहुत सीधे आगे था और लक्ष्यों को 1, 2 और 4.
var data$ = Rx.Observable.interval(1000)
.startWith('run right away')
.map(function() {
// `fetchItems(modifiedSince)` returns an array of items modified after `modifiedSince`, but
// I am not yet tracking the `modifiedSince` timestamp yet so all items will always be returned
return fetchItems();
});
अब मैं उत्साहित हूँ से मुलाकात की, कि आसान था, यह है कि बहुत कठिन नहीं किया जा सकता लक्ष्य पूरा करने के लिए 3 ... कई घंटे बाद में इस where I am at है:
var modifiedSince = null;
var data$ = Rx.Observable.interval(1000)
.startWith('run right away')
.flatMap(function() {
// `fetchItems(modifiedSince)` returns an array of items modified after `modifiedSince`
return fetchItems(modifiedSince);
})
.do(function(item) {
if(item.updatedAt > modifiedSince) {
modifiedSince = item.updatedAt;
}
})
.scan(function(previous, current) {
previous.push(current);
return previous;
}, []);
इस लक्ष्य 3 को हल करती है, लेकिन लक्ष्य 4. मैं अब नमूदार के बाहर राज्य भंडारण कर रहा हूँ पर regresses।
मुझे लगता है कि वैश्विक modifiedSince
और .do()
ब्लॉक इसे पूरा करने का सबसे अच्छा तरीका नहीं है। किसी भी मार्गदर्शन की काफी सराहना की जाएगी।
संपादित करें: उम्मीद है कि मैं इस प्रश्न के साथ क्या देख रहा हूं।
तुम कैसे जानते हो एक आइटम बदल गया है और किस समय अंतिम परिवर्तन हुआ? यह राज्य प्रबंधन के बारे में है, यदि आप अपने राज्य को अच्छी तरह परिभाषित करते हैं, तो 'स्कैन' ऑपरेटर को उस राज्य को अपने अवलोकन के जीवनकाल में ले जाने में मदद करनी चाहिए। – user3743222
@ user3743222 मैंने स्पष्ट करने के लिए प्रश्न को अद्यतन किया है। मुझे 'fetchItems (संशोधित Since)' से अधिकतम 'अपडेट किया गया' प्राप्त करने की आवश्यकता है और अगली बार इसे बुलाए जाने पर उस मान को 'fetchItems' में फ़ीड करें। – user774031