1
我試圖讓時間到期高速緩存工作於一個可觀察到的「請求 - 響應」,在窗口上使用postMessage
和message
事件。RxJS 5定時高速緩存
遠程窗口需要消息getItemList
並用類型爲{type: 'itemList', data: []}
的消息對其進行答覆。
我想建模itemList$
可觀察到的方式,它將最後一個結果緩存3秒,以便在那段時間內不會有新的請求,但是,我想不出有什麼方法可以實現優雅(閱讀,一個可觀察的 - 沒有主題)和緩和的方式。
這裏是代碼的例子:
const remote = someIframe.contentWindow;
const getPayload = message => message.data;
const ofType = type => message => message.type === type;
// all messages coming in from the remote iframe
const messages$ = Observable.fromEvent(window, 'message')
.map(getPayload)
.map(JSON.parse);
// the observable of (cached) items
const itemList$ = Observable.defer(() => {
console.log('sending request');
// sending a request here, should happen once every 3 seconds at most
remote.postMessage('getItemList');
// listening to remote messages with the type `itemList`
return messages$
.filter(ofType('itemList'))
.map(getPayload);
})
.cache(1, 3000);
/**
* Always returns a promise of the list of items
* @returns {Promise<T>}
*/
function getItemList() {
return itemList$
.first()
.toPromise();
}
// poll every second
setInterval(() => {
getItemList()
.then(response => console.log('got response', response));
}, 1000);
我知道the (very similar) question,但我想知道如果有人能拿出沒有明確的主題的解決方案。
預先感謝您!
看起來''.repeat()'添加到'itemList $'的末尾就是一個竅門。任何人都可以證實這是正確的做法嗎? –