Git Product home page Git Product logo

Comments (3)

WolframHempel avatar WolframHempel commented on May 23, 2024

Hi @Vortex375

a record's ready event fires when the record is first loaded(asynchronous). If its data is already loaded however it is available immediately (synchronously) - as can be determined by checking the record's isReady flag.

whenReady() was introduced solely for the purpose of normalising these two behaviors and intentionally fires straight away when the data is already available and with a delay if it is still being loaded.

from deepstream.io-client-js.

Vortex375 avatar Vortex375 commented on May 23, 2024

However, having this inconsistent behavior complicates the usage of this "convenience" method, because you have to check the isReady flag anyway, or always wrap the call to whenReady() in a process.nextTick() or setTimeout().

It also prevents the method from being used conveniently with async.waterfall() and the like.

Most importantly, it is common design practice to have a method either always invoke its callback synchronously or asynchronously - not both. Though the behavior is somewhat documented (it states the callback can be invoked "immediately") it is not what a user would expect the method to do.

Would there be any drawback to always invoking the callback asynchronously?

from deepstream.io-client-js.

WolframHempel avatar WolframHempel commented on May 23, 2024

You wouldn't actually need to wrap the method into setTimeout and async.waterfall works perfectly fine with a mix of synchronous and asynchronous methods.

As mentioned, whenReady purely exists to fire WHEN the record is ready - which might be the case already or once it received data from the server. Could you provide a concrete example that can't be solved without making the method aynchronous?

from deepstream.io-client-js.

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.