Answer the question
In order to leave comments, you need to log in
How to bypass method call chain waiting?
Let 's say I have a class that can receive and pass along a value processed by itself with a delay of 100 milliseconds:
class Gate {
constructor(process) {
this.process = process
this.input = false
this.output = false
this.closed = false
this.value = 0
}
open() {
this.close = false
}
close() {
this.close = true
}
// эмитируем сигнал
emit(value) {
if (!this.closed && this.output) this.output.update(value)
}
// получаем значение от сигнала
update(value) {
if (!this.closed) {
// ожидание для обхода стека
setTimeout(_ => {
this.value = this.process(value !== undefined ? value : this.input.value)
// отправляем дальше по цепочке
this.emit(this.value)
}, 100)
}
}
// подключение входного объекта
connectInput(object) {
this.input = object
object.output = this
}
// подключение выходного объекта
connectOutput(object) {
this.output = object
object.input = this
}
}
// пропускает сигнал без изменений
var a = new Gate(v => v)
// пропускает сигнал, инвертируя его
var b = new Gate(v => {
v = v ? 0 : 1
// вывод такта в консоль
console.log(v)
return v
}) // 0
// циклическая сеть
a.connectOutput(b)
b.connectOutput(a)
// запуск цикла
a.emit()
a.emit()
console.log('Ожидание старта цикла...')
// Ожидание старта цикла...
// 1
// 0
// 1...
a.emit()
a.close() // Попросту не работает
b.close() // Тоже ничего
Answer the question
In order to leave comments, you need to log in
It looks like there is a typo:
open() {
this.close = false
}
close() {
this.close = true
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question