Skip to content

Instantly share code, notes, and snippets.

View Chudesnov's full-sized avatar

Alexander Chudesnov Chudesnov

View GitHub Profile
@Chudesnov
Chudesnov / fetchAll.ts
Created April 9, 2024 18:21
Fetch all urls as fast as possible, limited by concurrency
/**
* Fetch all urls as fast as possible.
* Concurrency limits the amount of simultaneous window.fetch calls.
* Return fetched results in preserved order.
*/
export async function fetchAll<T>(urls: string[], concurrency: number = 3): Promise<T[]> {
const results: T[] = [];
const pool: Set<Promise<T>> = new Set();
let next: () => void = () => {};
@Chudesnov
Chudesnov / effector.md
Last active February 13, 2024 17:53 — forked from ilyalesik/effector.md
Article "Why did I choose Effector instead of Redux or MobX?"

Effector is a brand new reactive state manager. Its ambitious team aims to solve all the problems that existing solutions have. Writing the core of the library from scratch took several attempts across six months, and recently the team released the first stable release.

In this article, I will show why I prefer using Effector for my new projects instead of other state managers. Let's get started with the Effector API.

Basics

Effector uses two concepts you might already be familiar with: store and event.

A store is an object that holds some value. We can create stores with the createStore helper:

import {createStore} from 'effector'
// Listen to all errors
this.errorEventListener = event => {
if (this._isSet) {
global.removeEventListener('error', this.uncaughtErrorHandler); // remove from the queue in case it was previously added
}
global.addEventListener('error', this.uncaughtErrorHandler); // should always get appended the end of the list.
this._isSet = true; // set a flag to check in later error events.
}
// Report uncaught errors.
this.uncaughtErrorHandler = event => {
@Chudesnov
Chudesnov / observable.js
Created December 1, 2017 12:54
Observable
function myUpload (url, file) {
return new Observable(subscriber => {
const request = new XMLHttpRequest();
request.onload = function(data) {
subscriber.next(data);
subscriber.complete();
}
request.onerror = function(error) {
subscriber.error(error);
}
@Chudesnov
Chudesnov / Async-await.js
Created December 1, 2017 12:08
Async / Await
function renderUserProfile(userId) {
return fetch('/api/user').then(response => response.json()).then(user => {
const {
firstName,
lastName,
links
} = user;
const result = {
@Chudesnov
Chudesnov / Promises.js
Created December 1, 2017 11:53
Promises
const ourPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve('Hello'), 1000)
});
ourPromise
.then(resolvedValue => {
return resolvedValue;
})
.then(anotherValue => {
return new Promise((resolve, reject) => {
@Chudesnov
Chudesnov / callbacks.js
Created December 1, 2017 11:32
Callbacks
// const myFetch = require('data-fetching');
function myFetch (url, callback) {
const request = new XMLHttpRequest();
request.onload = function(data) {
callback(null, data);
}
request.onerror = function(error) {
callback(error);
}
@Chudesnov
Chudesnov / gist:e84db6bf17ca5d0fec6095139e2aff81
Created November 24, 2017 13:15
Как убрать закомментированный (или просто не работающий код) в git stash
  1. Делаем git status, убеждаемся, что working tree is clean. Если нет, делаем коммит со всем несохраненным.
  2. Находясь в редакторе, удаляем ненужный код. Если надо, добавляем один строчный комментарий вида // TODO: добавить запрос к API
  3. Делаем git add файла, который исправляли.
  4. Делаем undo в редакторе, чтобы код появился в файле снова. Если он был закомментирован, удаляем символы // или /*
  5. Делаем git commit
  6. Делаем git stash save -u "[описание удаленного кода, например, «запрос к АПИ (не реализовано)»]"
  7. Проверяем, что git status снова показывает working tree is clean, а в git stash list появилась новая запись
  8. Когда пришло время вернуть код на место, пишем git stash apply stash@{0} (тут вместо 0 номер из git stash list)
@Chudesnov
Chudesnov / project ideas.md
Last active October 11, 2017 17:01
Темы курсовых
@Chudesnov
Chudesnov / QA.md
Last active October 7, 2017 09:02
Вопросы слушателей

Какие опции за что отвечают в package.json

Основной список можно посмотреть в документации npm, есть также подробное описание всех стандартных опций. Все остальные опции (babel, jest, eslintConfig, etc.) предназначаются для соответствующих пакетов, соответственно, описание опций вы сможете прочитать на их сайтах.

Чем отличается добавление команды в scripts от такой же команды в консоли (или алиаса)

  1. Доступом к дополнительным путям в $PATH. Если вы, к примеру, установили в проекте webpack, то это не позволит вам запустить его, находясь в папке с проектом, просто командой webpack – придется писать ./node_modules/.bin/webpack или вовсе node ./node_modules/webpack/bin/webpack.js. Добавив в package.json скрипт, скажем, с названием build, и текстом webpack вы обнаружите, что при вводе npm run build или npm build webpack будет запущен