const func = () => {
console.log('hello, world!!');
setTimeout(func, 500 + Math.random() * 1000 | 0);
};
func();
0 = 0000 0000
1 = 0000 0001
2 = 0000 0010
3 = 0000 0011
4 = 0000 0100
5 = 0000 0101
6 = 0000 0110
7 = 0000 0111
8 = 0000 1000
9 = 0000 1001
3 = 0000 0011
означает 20 + 21 = 1 + 2 = 3.1 - бит 0 - notify
2 - бит 1 - friends
4 - бит 2 - photos
8 - бит 3 - audio
12 = 0000 0000 0000 1100
const createSetAuthInterceptor = options => config => {
if (options.access) {
config.headers.Authorization = options.access;
} else {
delete config.headers.Authorization;
}
return config;
};
const setAuthCb = createSetAuthInterceptor(store.state.auth);
axios.interceptors.request.use(setAuthCb);
let refreshTokenPromise;
const createUpdateAuthInterceptor = (store, http) => async error => {
const message = get(error, 'response.data.message');
if (!['Token expired', 'Invalid token'].includes(message)) {
return Promise.reject(error);
}
if (!refreshTokenPromise) {
refreshTokenPromise = store.dispatch('refreshToken');
}
await refreshTokenPromise;
refreshTokenPromise = null;
return http(error.config);
};
const updateAuthCb = createUpdateAuthInterceptor(store, axios);
axios.interceptors.response.use(null, updateAuthCb);
const getDayName = (day, lang) => (({
en: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
ru: [ 'Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота' ],
})[lang] || [])[day - (7 * Math.floor(day / 7))];
getDayName(5, 'en') // 'Friday'
getDayName(7, 'ru') // 'Воскресенье'
getDayName(-19, 'ru') // 'Вторник'
getDayName(4, 'fr') // undefined
const getDayName = (day, lang) =>
new Date(2001, 0, ((day % 7) + 7) % 7).toLocaleString(lang, { weekday: 'long' });
getDayName(4, 'fr') // 'jeudi'
getDayName(36, 'de') // 'Montag'
как писать поддерживаемый код?
Most common mistake software developers make: putting stuff in the wrong place. Coupling responsibilities and concepts that should be kept separate.
For me, this is 95% of software development. Just figuring out *where* things belong.
Что гуглить, что учить?
Может литературу какую почитать посоветуете?
Можно ли себя называть миддлом, если твой код говно?
Как перестать говнокодить и принимать неверные архитектурные решения?
как улучшить мой код
function fearNotLetter(str) {
const missing = Array
.from(str, n => n.charCodeAt(0))
.find((n, i, a) => n !== a[0] + i);
return missing && String.fromCharCode(missing - 1);
}
вопросов о выносе SubmitButton в отдельный компонент не возникает.
<Button onClick={handleSubmit}>Submit</Button>
Чем руководствоваться при выборе, вынести ли «подкомпонент» react в компонент или поместить в функцию внутри компонента?
const STAGES = {
2: 'itemGv',
5: 'itemTm',
};
for (const [ key, val ] of Object.entries(items)) {
const s = STAGES[val.stage];
if (s) {
this.client.srem('items', key);
this.emit(s, val);
}
}
const container = document;
const selector = 'input[type="checkbox"]';
const sumElements = elements =>
Array.prototype.reduce.call(elements, (acc, n) => acc + +n.value, 0);
const onSumChange = sum => console.log(sum);
container.addEventListener('change', function({ target: t }) {
if (t.matches(selector)) {
onSumChange(sumElements(this.querySelectorAll(`${selector}:checked`)));
}
});
container.querySelector(selector).dispatchEvent(new Event('change', { bubbles: true }));
const cb = container.querySelectorAll(selector);
let sum = sumElements(Array.prototype.filter.call(cb, n => n.checked));
const onChange = e => onSumChange(sum += e.target.value * [ -1, 1 ][+e.target.checked]);
cb.forEach(n => n.addEventListener('change', onChange));
onSumChange(sum);
Многие компании, насколько я знаю, заинтересованны в твоем непосредственном дипломе.
И что уж говорить о европейских странах, Норвегии, США и т.д? Получить там работу без вышки ты попросту не сможешь, каким бы ты невероятно талантливым и умелым не был.
GET 'api/images?limit=20&page=1'
{
data: [...],
quantity: 500,
}
GET 'api/images?limit=20&page=2'
const hasMore = page * limit < total;
25 * 20 < 500 // false
const arr1 = ['a'];
const arr2 = ['b'];
const arr3 = [...arr1, ...arr2];
const arr4 = [...arr1, 1, ...arr2, 'c'];
console.log(arr3);
// => ['a', 'b'];
console.log(arr4);
// => ['a', 1, 'b', 'c'];
const obj1 = { a: 'a', b: 'old b' };
const obj2 = { b: 'new b', c: 'c' };
const obj3 = { ...obj1, ...obj2 };
const obj4 = { ...obj2, ...obj1 };
const obj5 = { ...obj1, ...obj2, d: 'd' };
console.log(obj3);
// => { a: 'a', b: 'new b', c: 'c' };
console.log(obj4);
// => { a: 'a', b: 'old b', c: 'c' };
console.log(obj5);
// => { a: 'a', b: 'new b', c: 'c', d: 'd' };
saveItem = (id: string, modifiedItem: TCardItem) => {
В общем у меня уйдёт на это 2 - 2.5 месяца. Только на основы!
modals.entries() судя по документации должен предоставить [key, value]
[...modals.entries()].map(([ id, modal ]) => (
))