Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
BRAGA96

Ihor Bratukh

  • 179
    вклад
  • 14
    вопросов
  • 302
    ответа
  • 39%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как повесить событие на картинку, возвращаемую функцией?

    BRAGA96
    Ihor Bratukh @BRAGA96
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как менять названия объектов в зависимости от их количества?

    BRAGA96
    Ihor Bratukh @BRAGA96
    https://gist.github.com/realmyst/1262561#gistcomme...
    Ответ написан более двух лет назад
  • Как добавить в url рандомное число и сделать переадресацию в js?

    BRAGA96
    Ihor Bratukh @BRAGA96
    const rand = Math.random() * 1000 | 0;
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Скопировал готовый компонент из библиотеки antd,включающий в себя элемент Menu. Вылетает ошибка,якобы не находит. Что делать?

    BRAGA96
    Ihor Bratukh @BRAGA96
    const { Layout, Menu } = 'antd';
    Вы вытягиваете два свойства объекта из строки.
    Может так?:
    import antd from 'antd'
    const { Layout, Menu } = antd;
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как через axios передать дефолтные данные?

    BRAGA96
    Ihor Bratukh @BRAGA96
    axios interceptors
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Где в консоле хрома localStorage?

    BRAGA96
    Ihor Bratukh @BRAGA96
    Application -> LocalStorage
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Есть ли смысл начинать изучение радиоэлектроники с ARDUINO?

    BRAGA96
    Ihor Bratukh @BRAGA96
    Что мешает взять ардуино и паять датчики самому? Есть много DYI китов для тренировки и понимания радиотехники. В итоге узучите и то и то.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как обрабатывать код 400 и 401?

    BRAGA96
    Ihor Bratukh @BRAGA96
    req.code(400)
    res.code(400)
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Есть ли человекочитаемый полифил промиса на коллбэках?

    BRAGA96
    Ihor Bratukh @BRAGA96
    Когда-то для себя писал, что бы самому понять как примерно работает под капотом. Думаю основной посыл будет понятен. Писал специально на es5.
    promise.js
    ;(function () {
    	'use strict';
    
    	var cache = {};
    
    	var promise = function (handler) {
    		var uuid = Number(String(Math.random()).slice(2)).toString(32);
    
    		cache[uuid] = {
    			then: [],
    			catch: []
    		};
    
    		var api = {
    			status: {
    				pending: true,
    				resolved: false,
    				rejected: false
    			},
    
    			queue: function (items, callback) {
    				var ready = promise();
    				var collection = [];
    				(function next(index) {
    					var item = callback(items[index], index, items);
    					if (!item) return;
    					item.then(function (data) {
    						collection[index] = data;
    						items[index + 1] ? next(index + 1) : ready.resolve(collection);
    					});
    				}(0));
    				return ready;
    			},
    
    			parallel: function (items, callback) {
    				var ready = promise();
    				var collection = [];
    				var counter = 0;
    				for (var i = 0; i < items.length; i++) {
    					(function (index) {
    						var item = callback(items[index], index, items);
    						if (!item) return;
    						item.then(function (data) {
    							counter++;
    							collection[index] = data;
    							if (items.length === counter) {
    								ready.resolve(collection);
    							}
    						});
    					}(i));
    				}
    				return ready;
    			},
    
    			all: function (promises) {
    				var ready = promise();
    				var collection = [];
    				var counter = 0;
    				for (var i = 0; i < promises.length; i++) {
    					(function (index) {
    						promises[index].then(function (data) {
    							counter++;
    							collection[index] = data;
    							if (promises.length === counter) {
    								ready.resolve(collection);
    							}
    						});
    					}(i));
    				}
    				return ready;
    			},
    
    			then: function (callback, data) {
    				if (api.status.resolved) {
    					callback(data);
    				} else {
    					cache[uuid].then.push(callback);
    				}
    				return api;
    			},
    
    			catch: function (callback, data) {
    				if (api.status.rejected) {
    					callback(data);
    				} else {
    					cache[uuid].catch.push(callback);
    				}
    				return api;
    			},
    
    			resolve: function (data) {
    				if (api.status.resolved) return api;
    				api.status.pending = false;
    				api.status.resolved = true;
    				for (var i = 0; i < cache[uuid].then.length; i++) {
    					api.then(cache[uuid].then[i], data);
    				}
    				return api;
    			},
    
    			reject: function (data) {
    				if (api.status.rejected) return api;
    				api.status.pending = false;
    				api.status.rejected = true;
    				for (var i = 0; i < cache[uuid].catch.length; i++) {
    					api.catch(cache[uuid].catch[i], data);
    				}
    				return api;
    			}
    		};
    
    		if (handler) {
    			var instanse = promise();
    			handler(instanse.resolve, instanse.reject);
    			return instanse;
    		} else {
    			return api;
    		}
    	};
    
    	window.promise = promise;
    
    }());


    И код примеров:
    promise.examples.js
    (function () {
    	'use strict';
    
    	/** Одиночный AJAX запрос */
    	ajax('https://jsonplaceholder.typicode.com/posts/1').then(function (posts) {
    		console.log(posts);
    	});
    
    	/** Паралельные AJAX запросы */
    	promise().parallel([1, 2, 3, 4, 5, 6], function (id) {
    		return ajax(`https://jsonplaceholder.typicode.com/posts/${id}`);
    	}).then(function (posts) {
    		console.log(posts);
    	});
    
    	/** Последовательные AJAX запросы */
    	promise().queue([1, 2, 3, 4, 5, 6], function (id) {
    		return ajax(`https://jsonplaceholder.typicode.com/posts/${id}`);
    	}).then(function (posts) {
    		console.log(posts);
    	});
    
    	/** Использование promise. Пример 1 - callback функция */
    	getPostsMeta().then(function (posts) {
    		console.log(posts);
    	});
    
    	function getPostsMeta() {
    		return promise(function (resolve, reject) {
    			ajax('https://jsonplaceholder.typicode.com/posts').then(function (posts) {
    				var result = posts.map(function (post) {
    					return {
    						userId: post.userId,
    						postId: post.id
    					};
    				});
    				return resolve (result);
    			}).catch(function (error) {
    				return reject(error);
    			});
    		});
    	}
    
    	/** Использование promise. Пример 2 - создание инстанса */
    	wait(800).then(function (time) {
    		console.log(`Success async wait for ${time}ms`);
    	});
    
    	/** Версия с async/await */
    	(async () => {
    		const time = await wait(800);
    		console.log(`Success async wait for ${time}ms`);
    	})();
    
    	function wait(time) {
    		return promise(function (resolve) {
    			setTimeout(function () {
    				resolve(time);
    			}, time);
    		});
    	}
    
    	/** Async/Await с Thenable объектами */
    	(async () => {
    		var users = await ajax('https://jsonplaceholder.typicode.com/users');
    		console.log(users);
    	})();
    
    	/** Callback выполнения всех промисов */
    	var promises = [wait(500), wait(2500), wait(1000), wait(800)];
    	promise().all(promises).then(function (timers) {
    		console.log('All timers finished', timers);
    	});
    
    	// --------------------------------------------------------------------
    	function ajax(link) {
    		var ready = promise();
    		var xhr = new XMLHttpRequest();
    		xhr.onload = function () {
    			if (xhr.status >= 200 & xhr.status < 400) {
    				var data = tryCatch(function () {
    					return JSON.parse(xhr.responseText);
    				}, xhr.responseText);
    				ready.resolve(data);
    			} else {
    				var error = {
    					status: xhr.status,
    					error: xhr.statusText
    				};
    				ready.reject(error);
    			}
    		};
    		xhr.onerror = function () {
    			var error = {
    				status: xhr.status,
    				error: xhr.statusText
    			};
    			ready.reject(error);
    		};
    		xhr.open('GET', link, true);
    		xhr.send();
    		return ready;
    	}
    
    	function tryCatch(done, fail) {
    		try {
    			if (typeof done === 'function') {
    				return done();
    			}
    		} catch (error) {
    			if (fail !== undefined) {
    				if (typeof fail === 'function') {
    					return fail(error);
    				} else {
    					return fail;
    				}
    			}
    		}
    	}
    
    }());
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Функция для перевода из десятичной в двоичную систему?

    BRAGA96
    Ihor Bratukh @BRAGA96
    (3578557).toString(2); // '1101101001101010111101'
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как узнать название функции внутри этой функции?

    BRAGA96
    Ihor Bratukh @BRAGA96
    this.name
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Как сохранить параметр, который передан через router, после перезагрузки страницы?

    BRAGA96
    Ihor Bratukh @BRAGA96
    LoxalStorage либо вместо router.params юзать router.query
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • На чем писать скетч для nodemcu v3?

    BRAGA96
    Ihor Bratukh @BRAGA96
    Из вариантов C/C++, Lua, MicroPhyton. Пишите в чем знаете. Рекомендую попробовать PlatformIo вместо arduino ide
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Текст- строки в обратном порядке?

    BRAGA96
    Ihor Bratukh @BRAGA96
    array.reverse()
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Можно ли открыть страницу в новой вкладке с тем же состоянием?

    BRAGA96
    Ihor Bratukh @BRAGA96
    Скопировать state в localStorage
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Можно ли как то сделать, чтобы state менялся автоматически через определенный промежуток времени?

    BRAGA96
    Ihor Bratukh @BRAGA96
    setTimeout
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как сделать ленивую загрузку контента?

    BRAGA96
    Ihor Bratukh @BRAGA96
    Skeleton loading + ajax
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Vue i18n - Ошибка "Property '$t' does not exist on type 'VueConstructor". Как можно исправить?

    BRAGA96
    Ihor Bratukh @BRAGA96
    $t должен быть на экземпляре класса Vue, а не его статическим свойством.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Где практически применить язык Си?

    BRAGA96
    Ihor Bratukh @BRAGA96

    программирование микроконтроллеров, но ничего подробного, чтобы "От А до Я" в интернетах найти не получилось.

    Не верю, там есть все примеры, пошагово за ручку вас ведут по статьям. Самый популярный avr arduino, гуглите в эту сторону
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как сокращать такие конструкции?

    BRAGA96
    Ihor Bratukh @BRAGA96
    import { get } from 'lodash'
    let link = get(msg, 'attachments[0].audio_message.link_mp3', '')
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • Следующие →
Самые активные сегодня
  • GNUBack
    • 10 ответов
    • 0 вопросов
  • nedosekinstanislav
    Stanislav
    • 7 ответов
    • 0 вопросов
  • Drno
    • 7 ответов
    • 0 вопросов
  • alexey-m-ukolov
    Алексей Уколов
    • 7 ответов
    • 0 вопросов
  • Deita
    Deita
    • 4 ответа
    • 2 вопроса
  • Rsa97
    Rsa97
    • 5 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации