Giter Site home page Giter Site logo

callbacklist's People

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

callbacklist's Issues

InsertBefore argument for add()

To provide some control of the order in which callbacks are called, add an "insert before" argument to add().

Questions:

  • should you be able to provide multiple options for insert before, and it will insert before the first one that is found?
  • if none are found, should it append to the end of the list or throw an error? If the former it provides a more open-ended way of building up an ordering...

Option to pass return value as argument of next callback

For graphql 4, I created a “ComposedResolver” class which does almost the same thing (sequential user defined callbacks) except it passes the previous result into the next callback. Maybe a feature request? We could consolidate. 😏

A sort of reducer or "iterative transformer" could be provided by passing the return value of the first function as the argument of the 2nd, and so on. At the end, return the final result.

  • Presumably this would only work for a function of a single argument. If multiple arguments are passed to such a call-back, it should probably ignore subsequent arguments.
  • Should a return value of null be handled specially? Does it mean "pass null to the next callback" or "pass the original value to the next callback"? The former risks erroneously created callbacks causing heisenbugs, the latter means that null can never be returned.
  • How should such a callback-chain be set up?
    • A property setter on the class to switch to this mode of operation? Now the call/invoke methods need a different return-type signature.
    • A subclass with an overridden call() method? That breaks liskov substitution.
    • An alternative call method? Now it's opaque from looking at the class how it's intended to be used.

Implement __invoke()

The CallbackList should be usable as a callable by implementing __invoke.

  • Test invoking it
  • Test passing it to a method type-hinted as callable

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.