Skip to content

Instantly share code, notes, and snippets.

View patmigliaccio's full-sized avatar
🎧
jammin

Pat Migliaccio patmigliaccio

🎧
jammin
View GitHub Profile
@patmigliaccio
patmigliaccio / killnode.bat
Last active March 17, 2017 23:59
kill node - Forcefully terminates all node processes in Windows
rem Forcefully terminates all node processes
taskkill /f /im node.exe
@patmigliaccio
patmigliaccio / async-fishing-make-requests.js
Created September 2, 2017 01:20
patmigliaccio.com/async-fishing 12/11/2016
function makeRequests(urls){
let requests = urls.map(url => xhr({url: url, responseType: 'arraybuffer'}));
all(requests)
.then(response => {
response.forEach(value => {
if (value instanceof Error){
console.error(value);
}
@patmigliaccio
patmigliaccio / async-fishing-all.js
Last active September 2, 2017 01:22
patmigliaccio.com/async-fishing 12/11/16
function all(promises){
let len = promises.length,
returned = 0,
responses = [];
let totalPromise = new Promise((resolve, reject) => {
promises.forEach((p, i) => {
p.then(response => {
responses[i] = response;
})
@patmigliaccio
patmigliaccio / async-fishing-xhr.js
Last active September 2, 2017 01:22
patmigliaccio.com/async-fishing 12/11/16
function xhr({method = 'GET', url, async = true, responseType = ''}){
let req = new XMLHttpRequest();
req.open(method, url, async);
req.responseType = responseType;
let p = new Promise((resolve, reject) => {
req.onreadystatechange = () => {
if (req.readyState == XMLHttpRequest.DONE){
if (200 <= req.status && req.status < 300){
resolve(req.response);
@patmigliaccio
patmigliaccio / async-fishing-graceful-catch.js
Last active September 2, 2017 01:22
patmigliaccio.com/async-fishing 12/11/16
var a = () => Promise.resolve(1);
var b = () => Promise.reject(new Error(2));
var c = () => Promise.resolve(3);
Promise.all([a(), b(), c()].map(p => p.catch(e => e)))
.then(results => console.log(results)) // 1,Error: 2,3
.catch(e => console.log(e));
@patmigliaccio
patmigliaccio / async-fishing-all-fulfilled.js
Last active September 2, 2017 01:23
patmigliaccio.com/async-fishing - 12/11/16
function allFulfilled(answerPs) {
let countDown = answerPs.length;
const answers = [];
if (countDown === 0) { return answers; }
const deferredResult = Q.defer();
answerPs.forEach(function(answerP, index) {
Q(answerP).when(function(answer) {
answers[index] = answer;
if (--countDown === 0) { deferredResult.resolve(answers); }
}, function(err) {
@patmigliaccio
patmigliaccio / rate-limiting-limiter.js
Created September 2, 2017 01:25
patmigliaccio.com/rate-limiting 3/20/2017
function limiter(fn, wait){
let isCalled = false;
return function(){
if (!isCalled){
fn();
isCalled = true;
setTimeout(function(){
isCalled = false;
}, wait)
@patmigliaccio
patmigliaccio / rate-limiting-limiter-dropped.js
Created September 2, 2017 01:27
patmigliaccio.com/rate-limiting 3/20/2017
// Broken Code
function limiter(fn, wait){
let isCalled = false,
calls = [];
return function(){
calls.push(fn);
// Infinite Loop
while (calls.length){
@patmigliaccio
patmigliaccio / rate-limiting-limiter-recursive.js
Created September 2, 2017 01:29
patmigliaccio.com/rate-limiting 3/20/2017
function limiter(fn, wait){
let isCalled = false,
calls = [];
let caller = function(){
if (calls.length && !isCalled){
isCalled = true;
calls.shift().call();
setTimeout(function(){
isCalled = false;
@patmigliaccio
patmigliaccio / rate-limiting-limiter-args.js
Created September 2, 2017 01:30
patmigliaccio.com/rate-limiting 3/20/2017
function limiter(fn, wait){
let isCalled = false,
calls = [];
let caller = function(){
if (calls.length && !isCalled){
isCalled = true;
calls.shift().call();
setTimeout(function(){
isCalled = false;