Comments 4
https://benlesh.medium.com/hot-vs-cold-observables-f8094ed53339
cold -> не генерируют значения пока никто не подписан
warm -> генерируют значения пока есть хоть один подписчик
hot -> генерируют значения независимо от наличия подписчиков
----------------------------------------------
сделать cold -> warm:
share() + refCount
сделать cold -> hot:
share()
Это больше теоретические термины, я же интерпретировал это в рамках своей практической задачи, да и интерпретаций этих последовательностей куча - в любом случае смысл остается примерно тот же, как ни крути). В моем понимании:
Горячий режим (оптимизированный метод): Я использую этот термин для обозначения режима прослушки, который активируется, когда пользователь активен на вкладке. В целом, "горячий" может пониматься как что-то активное и быстрое, поэтому этот термин может быть справедливым
Холодный режим (константный метод): Я использую этот термин для обозначения режима прослушки, который активируется, когда пользователь покинул вкладку. Термин "холодный" обычно ассоциируется с чем-то неактивным или медленным, как и приведено в константном методе
Ну а примерно так это выглядело бы на $mol_wire:
class App extends $mol_object {
@ $mol_mem
logs() {
return [] as string[]
}
@ $mol_action
fetch() {
this.$.$mol_wait_timeout( 2000 + ( Math.random() * 1000 ) % 5000 )
const randomValue = Math.floor( ( Math.random() * 5000 ) % 5000 )
console.log( `[FETCH] Result ${randomValue} and logs: ${ this.logs() }` )
this.logs().push( randomValue )
return randomValue
}
@ $mol_action
fetch_trace() {
let duration =- $mol_wire_sync( Date ).now()
try {
const res = this.fetch()
cosole.log( `[FETCH TRACE] Done` )
return res
} catch( error : unknown ) {
cosole.log( `[FETCH TRACE] Fail` )
} finally {
duration += Date.now()
console.log( `[FETCH TRACE] Duration ${duration} ms` )
}
}
@ $mol_mem
fresh_value() {
const frequency = this.$.$mol_tab.active() ? 1000 : 8000
this.$.$mol_state_time.now( frequency )
return this.fetch_trace()
}
}
Холодная и горячая последовательность RxJS