CARVIEW |
Select Language
HTTP/2 200
date: Mon, 28 Jul 2025 11:18:39 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"a0a30c103af6bced4a16673c89c0e5c8"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=rIkwDGznLjEstcrmDiQzEASKJeeSD7sGArRjKr7aQ5L%2FqDHerSOFfb7SLooKEGCpLHFrhA43Fc85PbJPXPLN15Gh4ICKIzODUiCEw18O9rkFxL8ZjRxSTutKiVkkzXtzaMpQ9GHnt2HEVe3VPx3xassw%2Bskszy6AB%2FVssBSCOxhvUKG51iXv1UuMY0pkGjhrBgfy8p9zuwTU8exNnZMuRSGwqcHbv%2BoQMnUJnDNq%2ByzNs4d06lEcwjHGeI%2F6pgFLbMFGOI%2Fis8UkLRYWXiHaTQ%3D%3D--jVrj5WA1V9yTnbXQ--sbw6pOGKE7rbGqUG6zOwJg%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.123887331.1753701518; Path=/; Domain=github.com; Expires=Tue, 28 Jul 2026 11:18:38 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Tue, 28 Jul 2026 11:18:38 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: 9F7C:15E61D:19772C7:20405F8:68875C8E
publish/subscribe, or pubsub · GitHub
Show Gist options
Save jed/976046 to your computer and use it in GitHub Desktop.
{{ message }}
Instantly share code, notes, and snippets.
-
Star
15
(15)
You must be signed in to star a gist -
Fork
5
(5)
You must be signed in to fork a gist
-
Save jed/976046 to your computer and use it in GitHub Desktop.
publish/subscribe, or pubsub
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function( | |
a, // the subscription object | |
b, // the current event number | |
c // (placeholder) | |
){ | |
return { // return an object, with | |
pub: function( // a "pub" function that takes | |
d, // a channel name and | |
e // a message value, | |
){ // and | |
for( // for each | |
c // subscriber | |
in a // in the subscription object, | |
) if ( // if | |
c // its name, with the event number discarded | |
.split // by splitting it | |
("-") // with a hyphen and | |
[0] // taking only the first part, | |
== d // is equal to the published channel | |
) a[c](e) // call the subscriber. and if | |
!== !1 || // the value returned is false | |
delete a[c] // unsubscribe by removing the subscriber, and | |
}, | |
sub: function( // a "sub" function that takes | |
d, // a channel name and | |
e // a subscriber function | |
){ // and, | |
a[ // on the subscriptions object, | |
d + // sets the name of the channel appended with | |
--b // a hyphen and the decremented event number, to | |
] = e // the function passed. | |
} | |
} | |
}( // auto-run with | |
{}, // the subscription object | |
0 // and event id. | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function(a,b,c){return{pub:function(d,e){for(c in a)if(c.split("-")[0]==d)a[c](e)!==!1||delete a[c]},sub:function(d,e){a[d+--b]=e}}}({},0) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |
Version 2, December 2004 | |
Copyright (C) 2011 Jed Schmidt <https://jed.is> | |
Everyone is permitted to copy and distribute verbatim or modified | |
copies of this license document, and changing it is allowed as long | |
as the name is changed. | |
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |
0. You just DO WHAT THE FUCK YOU WANT TO. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "pubsub", | |
"keywords": [ "pubsub", "observer", "publish", "subscribe" ] | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Define the pubsub object, which provides the "pub" and "sub" methods. | |
var pubsub = function(a,b,c){return{pub:function(d,e){for(c in a)if(c.split("-")[0]==d)a[c](e)!==!1||delete a[c]},sub:function(d,e){a[d+--b]=e}}}({},0) | |
// Subscribe to the "random" channel, returning false to unsubscribe. | |
pubsub.sub("random", function( msg ) { | |
console.log("this is called once: " + msg); | |
return false; | |
}) | |
// Subscribe to the "random" channel, and always renew. | |
pubsub.sub("random", function( msg ) { | |
console.log("this is called forever: " + msg); | |
}) | |
// Subscribe to the "random" channel, but set an | |
// expiration date 5 seconds in the future, and | |
// unsubscribe when the date is reached. | |
expiration = +new Date + 5000 | |
pubsub.sub("random", function( msg ) { | |
console.log( "this is called for 5 seconds: " + msg); | |
return +new Date < expiration; | |
}) | |
// Publish a random number between 1 and 10 to | |
// the "random" channel every second. | |
setInterval( function(){ pubsub.pub( "random", 0|Math.random()*10 ) }, 1000 ) |
foo
is the channel, and the message is a random number.
Yes but in this example, suscribers are listening to the "random" channel while the publisher uses the "foo" channel. Nothing happens.
In addition to that, the comment is about the "random" channel.
ha, good catch. my apologies, i misunderstood you. will fix now.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You can’t perform that action at this time.
Shouldn't the channel be "random" instead of "foo"?