Skip to content

Instantly share code, notes, and snippets.

@samzhao
samzhao / machine.js
Last active August 21, 2020 03:31
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
import isEmpty from 'lodash/isEmpty'
const retryIfEmpty = async (input): Promise<any> => {
const { request, timeout = 200, maxCalls = 6 } = input;
return new Promise(async (resolve, reject) => {
try {
const { data } = await request;
if (isEmpty(data)) {
@samzhao
samzhao / index.js
Last active June 30, 2018 03:59
Usage of delayedMap helper
const toListItem = async item => {
const { thing } = await sendRequest();
return thing;
};
const delayTime = 100;
const items = delayedMap(listOfStuff, toListItem, delayTime);
@samzhao
samzhao / index.js
Created June 30, 2018 03:58
Delayed map helper
const delayedMap = async (list, iterator, delayTime) => {
let promises = [];
for (const item of list) {
await delay(delayTime);
promises.push(await iterator(item));
}
return Promise.all(promises);
};
@samzhao
samzhao / index.js
Created June 30, 2018 03:50
Making async/await delay helper work in a loop
const delay = time =>
new Promise(resolve => setTimeout(resolve, time));
const list = new Array(10).fill();
for (let index of list.keys()) {
await delay(1000);
console.log(index);
}
@samzhao
samzhao / index.js
Created June 30, 2018 03:39
Bad example of using async/await for delaying calls in a loop
const delay = time =>
new Promise(resolve => setTimeout(resolve, time));
const list = new Array(10).fill();
list.forEach(async (_, index) => {
await delay(1000);
console.log(index);
});
@samzhao
samzhao / index.js
Created June 30, 2018 03:22
Delay with async/await
const delay = time =>
new Promise(resolve => setTimeout(resolve, time));
const sendRequest = async () => {
await delay(1000);
return axios.get(API_URL);
}
// request fires after 1 second
sendRequest();
@samzhao
samzhao / index.js
Last active June 30, 2018 03:20
Simple Async/await Example
import axios from 'axios';
const API_URL = "https://jsonplaceholder.typicode.com/posts/1";
// Before async/await
const logPostId = () => {
axios.get(API_URL)
.then(resp => {
const { data } = resp;
const { id } = data;
@samzhao
samzhao / gist:1991822
Created March 7, 2012 08:06
Javascript: jQuery pubsub
(function($) {
var o = $( {} );
$.each({
on: 'subscribe',
trigger: 'publish',
off: 'unsubscribe'
}, function( key, api ) {
$[api] = function() {
o[key].apply( o, arguments );
angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.transition","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdownToggle","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/popup.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/popo