Giter Club home page Giter Club logo

Comments (6)

Riim avatar Riim commented on July 19, 2024

pull прийдётся постоянно заворачивать в { pull: /* ... */ }, неудобно.

Да и в принципе oldValue в pull не нужен вроде в таком случае.

через oldValue можно управлять какое значение будет иметь асинхронная ячейка во время запроса:

var value = cellx((push, fail, oldValue) => {
    makeRequest(res => {
        push(res.data.value);
    });

    return oldValue; // на время запроса ячейка останется со старым значением
    return oldValue || 0; // на время запроса ячейка останется со старым значением и значение до первого ответа будет `0`.
    return null; // на время запроса ячейка будет обнулена.
});

from cellx.

zerkalica avatar zerkalica commented on July 19, 2024

Бывает не надо заворачивать { pull: /* ... */ }, а надо new CustomCellOptions(bla-bla) Создание объекта дешевле, чем функции.

from cellx.

Riim avatar Riim commented on July 19, 2024

Но где-то в bla-bla тоже ведь функция будет?

from cellx.

zerkalica avatar zerkalica commented on July 19, 2024

Не факт, но надо подумать.

У меня задумка была с очередями, которые управляли бы состоянием атома:

class AsyncQeue<V> {
  _defaultValue: V
  pull(push, fail, oldValue) {}
  push() {} ...
}
const queue = new AsyncQeue('defaut')

cellx(null, queue)
// что не делать (...args) => queue.pull(...args)

from cellx.

zerkalica avatar zerkalica commented on July 19, 2024

Можно писать код так, что генерации функций не будет нигде. Но я про то, что нет единообразия:

pull в ICellOptions, тем более что там уже есть put, reap и т.д.

Почему передача 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)

from cellx.

zerkalica avatar zerkalica commented on July 19, 2024

Сравни cellxPull и cellxNoPull

Абстракции проще, когда pull/push не в формуле, а отдельно, в виде атомов.

from cellx.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.