-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pull в ICellOptions #21
Comments
pull прийдётся постоянно заворачивать в
через oldValue можно управлять какое значение будет иметь асинхронная ячейка во время запроса: var value = cellx((push, fail, oldValue) => {
makeRequest(res => {
push(res.data.value);
});
return oldValue; // на время запроса ячейка останется со старым значением
return oldValue || 0; // на время запроса ячейка останется со старым значением и значение до первого ответа будет `0`.
return null; // на время запроса ячейка будет обнулена.
}); |
Бывает не надо заворачивать |
Но где-то в |
Не факт, но надо подумать. У меня задумка была с очередями, которые управляли бы состоянием атома: class AsyncQeue<V> {
_defaultValue: V
pull(push, fail, oldValue) {}
push() {} ...
}
const queue = new AsyncQeue('defaut')
cellx(null, queue)
// что не делать (...args) => queue.pull(...args) |
Можно писать код так, что генерации функций не будет нигде. Но я про то, что нет единообразия:
Почему передача pull вдруг иначе, чем остальные точки расширения? При попытке интегрироваться с cellx, это порождает вот такие костыли: class AtomController {
_pull(push: (v: V) => void, fail: (e: Error) => void, oldValue: ?V): V {
//...
}
reap(): void {
this._updater.cancel()
}
pull: PullFn<V> = (
push: (v: V) => void,
fail: (e: Error) => void,
oldValue: ?V
) => this._pull(push, fail, oldValue)
}
const ac = new AtomController()
new cellx.Cell(ac.pull, ac) |
Сравни cellxPull и cellxNoPull Абстракции проще, когда pull/push не в формуле, а отдельно, в виде атомов. |
сейчас конструктор Cell такой:
На мой взгляд правильнее добавить pull в ICellOptions, тем более что там уже есть put, reap и т.д.
Тогда и неаккуратность с oldValue === undefined при первом выполнении pull разрешится:
Да и в принципе oldValue в pull не нужен вроде в таком случае.
Есть еще один аспект, например когда pull функция генерируется кем-то, можно не генерить функции, а экземпляр класса создать, ресурсов меньше.
The text was updated successfully, but these errors were encountered: