Comments (2)
@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.
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)
- Iterators 'blocking' each other HOT 2
- Feat: Performance Tests HOT 1
- AsyncIterator-ext Package HOT 7
- Performance: Improve performance of `append` and `prepend` HOT 1
- Possible memory leaks HOT 2
- Make @types/node a dependency (rather than devDependency) HOT 2
- Remove self
- WrappingIterator does not destroy sources HOT 2
- Discussion: Destroy propagation in callback-based TransformIterator HOT 5
- Move each iterator to its own source file
- potential bug: `wrap` now autostarting iterators that were previously not autostarted prior to optimisation work HOT 17
- Feat: Make asynciterator asynciterable HOT 2
- Migrate to use a different event emitter base HOT 2
- What happens to iterators after they error? HOT 4
- Investigate macroTasking HOT 5
- Emit destroyed event once upon destroy
- Intermediate async iterator does not correctly emit readable event, unpredictably HOT 2
- Debug mode
- How can a whole text stream be consumed into a string? HOT 1
- `AsyncIterator` type is not covariant HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from asynciterator.