Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 September 19

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
и даже не нода. это другой рантайм
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Nikita Machekhin
Да, просто на оборот
Задача вообще такая, надо перенести базу с одного сервера на другой, желательно с минимальными потерями данных. Данные скопировали но на старом сервер 10й постгрес, а на новом 12й. Можно ли реплицировать на новый постгрес или надо ставить 10, реплицировать и обновить до 12? А после репликации переключить его в режим мастера и клиенты ничего не заметят?
источник
2020 September 20

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Использую функцию throttle из библиотеки metasync.
Логика приложения такая:

const { throttle } = require('metasync');

const businessLogic = () => {
 // …some logic
  console.log(currentTime(‘Hours:min:sec:msec’), ‘Save’);
}

const SWT = throttle(1000, businessLogic);

setInterval(() => {
   SWT(some data);
}, 50);


Я ожидаю что функция SWT будет вызываться один раз в секунду, а она вызывается 2 раза в секунду…
лог такой:

20:29:52:108 Save
20:29:52:135 Save
20:29:53:137 Save
20:29:53:176 Save
20:29:54:177 Save
20:29:54:195 Save
20:29:55:198 Save
20:29:55:231 Save


Почему так? и подскажите что я делаю не так, вернее чего я еще не знаю раз получаю такое поведение.
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
функция throttle такая:

// Get throttling function, executed once per interval
// Signature: timeout, fn, ...args
//   timeout - <number>, msec interval
//   fn - <Function>, to be throttled
//   args - <Array>, arguments for fn, optional
//
// Returns: <Function>

const throttle = (timeout, fn, ...args) => {
 let timer;
 let wait = false;

 const execute = args
   ? (...pars) => (pars ? fn(...args, ...pars) : fn(...args))
   : (...pars) => (pars ? fn(...pars) : fn());

 const delayed = (...pars) => {
   timer = undefined;
   if (wait) execute(...pars);
 };

 const throttled = (...pars) => {
   if (!timer) {
     timer = setTimeout(delayed, timeout, ...pars);
     wait = false;
     execute(...pars);
   }
   wait = true;
 };
 return throttled;
};
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Miseo
функция throttle такая:

// Get throttling function, executed once per interval
// Signature: timeout, fn, ...args
//   timeout - <number>, msec interval
//   fn - <Function>, to be throttled
//   args - <Array>, arguments for fn, optional
//
// Returns: <Function>

const throttle = (timeout, fn, ...args) => {
 let timer;
 let wait = false;

 const execute = args
   ? (...pars) => (pars ? fn(...args, ...pars) : fn(...args))
   : (...pars) => (pars ? fn(...pars) : fn());

 const delayed = (...pars) => {
   timer = undefined;
   if (wait) execute(...pars);
 };

 const throttled = (...pars) => {
   if (!timer) {
     timer = setTimeout(delayed, timeout, ...pars);
     wait = false;
     execute(...pars);
   }
   wait = true;
 };
 return throttled;
};
Тут вроде косяк, попробуй изменить
 const delayed = (...pars) => {
   timer = undefined;
 };
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
User True
Тут вроде косяк, попробуй изменить
 const delayed = (...pars) => {
   timer = undefined;
 };
ООООО!!!! работает! Спасибо! А теперь надо это в библиотеке поправить. А то не хорошо получается. Библиотека metasync всё таки с заявкой на успех )
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Miseo
ООООО!!!! работает! Спасибо! А теперь надо это в библиотеке поправить. А то не хорошо получается. Библиотека metasync всё таки с заявкой на успех )
Не я тоже просто подзабыл, она так и должна работать, а тебе видимо надо debounce функцию
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
User True
Не я тоже просто подзабыл, она так и должна работать, а тебе видимо надо debounce функцию
Улучшил, теперь запоминает последний вызов и интервалы правильные

const throttle = (timeout, fn, ...args) => {
 let timer;
 let savedArg;
 let savedThis;

 const delayed = () => {
   timer = undefined
   if (savedArg) {
     throttled.call(savedThis, ...savedArg);
     savedArg = savedThis = undefined;
   }
 };

 const throttled = (...pars) => {
   if (timer) {
     savedArg = pars;
     savedThis = this;
     return
   }

   fn.call(this, ...args, ...pars);
   timer = setTimeout(delayed, timeout);
 };
 return throttled;
};
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
User True
Улучшил, теперь запоминает последний вызов и интервалы правильные

const throttle = (timeout, fn, ...args) => {
 let timer;
 let savedArg;
 let savedThis;

 const delayed = () => {
   timer = undefined
   if (savedArg) {
     throttled.call(savedThis, ...savedArg);
     savedArg = savedThis = undefined;
   }
 };

 const throttled = (...pars) => {
   if (timer) {
     savedArg = pars;
     savedThis = this;
     return
   }

   fn.call(this, ...args, ...pars);
   timer = setTimeout(delayed, timeout);
 };
 return throttled;
};
Огромное спасибо! А эта версия войдёт в библиотеку?
источник

a

ant0n [Lviv] 🇺🇦 R16+... in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Огромное спасибо! А эта версия войдёт в библиотеку?
@UserTrue делает PR, @tshemsedinov с коллабораторами ревьювает, и вуаля

Или сделай себе форк metasync и аплайни эти изменения🙄
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
И тесты не забываем
источник

a

ant0n [Lviv] 🇺🇦 R16+... in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Огромное спасибо! А эта версия войдёт в библиотеку?
А вообще нафига тебе этот metasync, его никто не юзает

Weekly Downloads 116
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
ant0n [Lviv] 🇺🇦 R16+R13
А вообще нафига тебе этот metasync, его никто не юзает

Weekly Downloads 116
Это пока 116. Пока Метархия еще не настолько известна. Но в будщем всё изменится. И скачиваний будет минимум как у pg.
источник

a

ant0n [Lviv] 🇺🇦 R16+... in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Это пока 116. Пока Метархия еще не настолько известна. Но в будщем всё изменится. И скачиваний будет минимум как у pg.
Ага и будет у тебя как бы vendor lock на Тимура😁
источник
2020 September 21

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
ant0n [Lviv] 🇺🇦 R16+R13
Ага и будет у тебя как бы vendor lock на Тимура😁
К тому моменту я лично приложу все усилия чтобы сообщество поддерживало и развивало такие вещи.
источник

O

Oleh in NodeUA - JavaScript and Node.js in Ukraine
всем привет,
про jwt и access token - refresh token, access token - сам токен храним не в localStorage как это обычно делают, а в памяти клиентского приложения. Refresh token храним в httpOnly cookie. Но память клиентского приложения это до перезагрузки страницы, значит ли что мы каждый раз при ините клиентского приложения идем с этим refresh токеном за access token'ом?
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Oleh
всем привет,
про jwt и access token - refresh token, access token - сам токен храним не в localStorage как это обычно делают, а в памяти клиентского приложения. Refresh token храним в httpOnly cookie. Но память клиентского приложения это до перезагрузки страницы, значит ли что мы каждый раз при ините клиентского приложения идем с этим refresh токеном за access token'ом?
Why JWT is bad for Authentication

https://t.me/why_jwt_is_bad
источник

VH

Vladyslav Holovko in NodeUA - JavaScript and Node.js in Ukraine
Oleh
всем привет,
про jwt и access token - refresh token, access token - сам токен храним не в localStorage как это обычно делают, а в памяти клиентского приложения. Refresh token храним в httpOnly cookie. Но память клиентского приложения это до перезагрузки страницы, значит ли что мы каждый раз при ините клиентского приложения идем с этим refresh токеном за access token'ом?
Після перезавантаження сторінки аксес токена немає. Як робити запити? Ніяк, требя отримати токен. Тому як варіант так, берем рефреш и робимо запит на новий аксес токен.
источник

A

Arthur in NodeUA - JavaScript and Node.js in Ukraine
Vladyslav Holovko
Після перезавантаження сторінки аксес токена немає. Як робити запити? Ніяк, требя отримати токен. Тому як варіант так, берем рефреш и робимо запит на новий аксес токен.
А если же хранить токен в localStorage то перезагрузки он сохраниться же
А все, выше почитал, простите
источник

VH

Vladyslav Holovko in NodeUA - JavaScript and Node.js in Ukraine
Звичайно
источник