GithubHelp home page GithubHelp logo

Comments (2)

RubenVerborgh avatar RubenVerborgh commented on May 19, 2024

@rubensworks The problem with using queueMicrotask is that it precedes browser rendering, i.e., it behaves as if it is one long continuous piece of code.

An way around this, is to use a wrapper function that makes every 1 in 100 (or so) calls a setImmediate / setTimeout call.

Such unpredictable behavior is of course hard for tests, so I would switch it off by default.

However, the question is whether it could also create undesired behavior outside of test environments.

I personally don't think it does: the tests simulate worst-case behavior, where we want to test certain race conditions and hence are more timing-sensitive. In fact, I just tried changing queueMicrotask by setImmediate in the code file, and only 1 case fails (spanning 3 out of 1563 tests), and it is literally testing a race condition ("a BufferedIterator that is being closed while reading is in progress").

So do you think we can safely, by default or otherwise, enable such switched behavior in browsers?

from asynciterator.

rubensworks avatar rubensworks commented on May 19, 2024

A wrapper to make every 1 in x calls a setImmediate or so sounds like a good idea. I also ran into problems related to this during testing (which will most likely also occur in production).

I would consider enabling this wrapper by default, but provide the functionality to disable/adjust this. Developers could then easily make use of this lib with a sane default config that works in most situations. If needed, they could still adjust manually. Also for tests, they could reconfigure if needed.

I first thought about just enabling this in browsers, but not in Node. But after thinking about this a bit more, I wouldn't do this, as this may cause confusion among developers, as they may not expect this.

from asynciterator.

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.