Comments (4)
Hey, thank you for your error report.
I've created a new release that fixes this issue: https://github.com/mroderick/PubSubJS/releases/tag/v1.3.9
from pubsubjs.
@mroderick
First of all, thank you for this wonderful library.
Though I would like to dispute this fix:
What if a user has more than 2 subscribers to a message? And let's say callback number 2 decides to unsubscribe from this message. This means that callback number three will not be called during this delivery session because max length was reached.
(for example, you have several dialogs subscribing to a "close all dialogs" message. The last dialog will not get a message delivered)
var mySubscriber = function(msg, data) {
// Unsubscribe - I only want to be fired once
PubSub.unsubscribe(mySubscriber);
console.log('mySubscriber');
};
var mySubscriber2 = function(msg, data) {
console.log('mySubscriber2');
};
var mySubscriber3 = function(msg, data) {
console.log('mySubscriber3 - I never get fired off, sad face.');
};
PubSub.subscribe( 'ONE SHOT', mySubscriber);
PubSub.subscribe( 'ONE SHOT', mySubscriber2);
PubSub.subscribe( 'ONE SHOT', mySubscriber3);
PubSub.publish( 'ONE SHOT', 'hello world!' );
A suggestion for a fix would be to add a 'deleteRequested' flag that gets asserted if unsubscribe is called during delivery. If not currently delivering, the subscriber is immediately deleted.
When iterating through the subscriber list, only call callSubscriber if the deleted flag is not asserted for the subscriber.
Then, when you are finished iterating through the list - call a cleanup function that will delete all subscribers that have the deleted flag asserted.
Thoughts?
from pubsubjs.
@Mathews2115 have you run into this issue recently? The internal code has changed a fair bit since this issue was closed and the above example works as expected on the latest version. If you can reproduce it, it's worth updating the example and opening a new issue for this.
from pubsubjs.
@aron You're completely right. I'm dumb. I thought I had a later version and didn't verify before commenting, therefore committing every sin I complain about. Thank you for verifying this.
Cheers.
from pubsubjs.
Related Issues (20)
- Waiting for subscriber to finish executing HOT 1
- Allow passing array of subscription tokens into unsubscribe
- Allow subscribing to multiple topics at once with same callback HOT 1
- Import vs window - unpredictable publishers HOT 5
- countSubscriptions always returns 1 HOT 4
- getSubscriptions wrong result
- use it in react hooks Why are requests repeated HOT 3
- PubSub does not work under Context API HOT 4
- Add "files" field in package.json HOT 1
- PubSub keep using the initial state value in .subscribe() - ReactJS HOT 4
- Any tests examples approach on this library? (with React) HOT 2
- Add the possibility to await sync events (publishAwait) HOT 3
- I can't subscribe event while publish any topic, in different controller
- Rename "PubSub" variable for multiple instances HOT 1
- Feature wanted - RegExp HOT 1
- clearSubscriptions would clear different topics which includes the same string
- ReadMe points to wrong jsdelivr package HOT 5
- Publish Latest value HOT 2
- Wildcard support for subscriptions? HOT 2
- Troubleshooting event subscription not working in a React component 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 pubsubjs.