Yaroslav 🇺🇦
Чем async await не устроил?
Не рендерим космпонент пока нет резолва промиса
Roman
короч по моему мнению лучше 1. не инвалидировать сессии, если девайс родной 2. предоставить список текущих сессий и возможность их мануальной инвалидации 3. инвалидировать сессии инициированные с чужих компов 4. предоставить мануальные настройки в разделе безопасности
CherryTea
Чем async await не устроил?
Вот кстати асинк с авэйтом не всегда лучше then
CherryTea
почему?
Ну вопервых это ещё не вошло в стандарт, во вторых если нужна конструкция в одну строку асинк с авейтом не оч хорошо выглядит
Roman
5. чипануть мозк юзерам
уже очень скоро) только не мозг, а в кожу между указательным и большим пальцем, инъектиця маленького пассивного чипа-идентификатора уже практикуется в США)
CherryTea
И ещё если я не знаю что мне придёт промис или нет, я могу написать проверку на метод then, с асинком я чёт не понял что делать в таком случае
Roman
Ну вопервых это ещё не вошло в стандарт, во вторых если нужна конструкция в одну строку асинк с авейтом не оч хорошо выглядит
согласен да, кстати что у async/await что у promise есть одна большая проблема: их нельзя ни приостановить (паузировать) ни отменить. поэтому я вообще перешёл на парадигму стримов https://github.com/qbeon/QuickStreams
CherryTea
Нет вообще
Rafael 🌵
А, ну лан
Roman
Стримы это rxjs, не?
почти 🙂в RxJS к сожалению нет инструмента создания своих собственных стримов, там всё на обработке событий (event driven programming) зациклено, а вот asynchronous control flow к сожалению нет поэтому пришлось мне дополнить парадигму примитивом "стрим"
Roman
асинхронная загрузка больших файлов например очень хорошее применение для стримов
Roman
стримы можно отменить, приостанивить, зациклить...
Yaroslav 🇺🇦
RouteBeforeEnter?
ага в ssr)
Rafael 🌵
ага в ssr)
Резонно, резонно
Roman
var fileUpload = api.uploadFile("/path/to/file.mp4") .retry([api.TimeoutError, api.BadGatewayError]) fileUpload.attach(() => { // finished uploading }) fileUpload.failure((err) => { // upload failed }) attach аналог then промисов, failure аналог catch
Roman
типа "загрузи файл X, если не получится загрузить по причине Timeout или BadGateway то пробуй заново пока не получится, иначе переходи в failure"
Roman
// приостановить загрузку fileUpload.pause() // отменить загрузку fileUpload.cancel()
CherryTea
тема, спасибо
Roman
причём api.uploadFile это композиция из под-стримов, которая вызывает стримы api.createFile(), api.writeFile()
CherryTea
// приостановить загрузку fileUpload.pause() // отменить загрузку fileUpload.cancel()
А получить прогресс загрузки иполностью отметить конечно же тоже можно?
CherryTea
И ещё такой вопрос, скажем у меня есть спа которое во время загрузки потеряло соединение. Поднялось оно снова через 20 минут, я тип могу возобновить загрузку?
Stanislav
))) покаж
Нет))))
Roman
А получить прогресс загрузки иполностью отметить конечно же тоже можно?
function uploadFile(newFileName) { return streams.stream((stream) => { var file; var chunks = [...]; var currentChunk = 0; var childSequence = api.createFile(newFileName) // если неудаётся создать файл - то пробуй заново пока не получится // может клиент просто в тонель заехал временно и связи пока нет // HTTP timeout это не повод обрывать загрузку .retry(api.Timeout) // после успешного асинхр. создания файла начинай загружать .attach((createdFile) => { file = createdFile; api.writeToFile(file, chunks[currentChunk]); }); // повтори загрузку чанка если связь пропала .retry(api.Timeout) // повторяй загрузку чанка пока ещё есть чанки .repeat(() => { // кинь событие успешного прогресса в главный стрим stream.event("upload_progressed", {chunk: currentChunk}); currentChunk++; return currentChunk >= chunks.length(); }) // заверши загрузку .attach(() => { // заверши главный поток uploadFile stream.close(); }) // в случае любой ошибки в секвенции под-стримов uploadFile // и приберись, удали неполностью загруженный файл childSequence.failure(api.deleteFile(newFileName)); // в случае отмены секвенции под-стримов uploadFile // и приберись, удали неполностью загруженный файл childSequence.abortion(api.deleteFile(newFileName)); // сделать этот стрим родительским (high level stream, компоцизия стримов) // чтоб отмена или паузирование стрима uploadStream отразилась на секвенции stream.adopt(childSequence); }) }
Roman
вот полноценный пример отменяемой, паузируемой и асинхронной загрузки большого файла, всего 42 строки, никакой псевдо-рекурсии, не боится потери связи
CherryTea
CherryTea
Беру
CherryTea
Ты ща решил все мои проблемы))
Roman
правда беда в том что я написал QuickStreams для QML C++, но в JavaScript пока эту парадигму не имплементировал, работал над ней где-то 2 месяца, хотел сделать серию видео туторов но времени нет
Roman
https://qbeon.github.io/QuickStreams/
Roman
однако я не обновлял код в примерах с версии v0.1.0, он значительно упростился в v0.2.0
Roman
самое интересное это вот:
Roman
Roman
услышать feedback мне очень интересно) поскольку Streams парадигма это как Promise + Rx на стероидах
Yaroslav 🇺🇦
пили видосы
Roman
пили видосы
для этого нужно хотя бы реализацию в QML до v1.0.0 довести)
Roman
если кто задонадит то это меня немного восвободит от фрилансерской деятельности
Roman
но хз где публиковать
Roman
хотелось бы от RxJS'еров услышать feedback
gearmobile
гайз, а где фрилансеры с upwork трутся? канал telegram?
Rafael 🌵
gearmobile
Юрий
Здоров, ребят. Не буду нарушать традиций и представлюсь) Величают Юрцом, работал в мэйле, яндексе и в нескольких стартапах. В данный момент пилю фронт для workato.com - калифорнийский стартап про интеграцию сервисов. Интересуюсь универсальными решениями (ssr+spa) и есть работающая наработка на базе react+mobx.
Юрий
Но как-то в последнее время все больше поглядываю в сторону vue
Anonymous
Соблазн силен)
Юрий
Нравятся 3-in-1 компоненты, шаблоны с возможностью заюзать render-функцию в сложных случаях и реактивность из коробки
Юрий
Так вот вопрос: есть ли какой-либо аналог mobx, но используюший под капотом реативный движок vue
Yaroslav 🇺🇦
Всем нравится, но многие бояться признаться)
Yaroslav 🇺🇦
Vuex
Юрий
То есть чтобы можно было создавать модели с реактивными свойствами, что-то вроде вот такого:
Юрий
class User { @observable firstName = ''; @observable lastName = ''; @computed get fullName() { return ${this.firstName} ${this.lastName}; } }
Yaroslav 🇺🇦
Тут чутка не так. Все свойства можна описать в модуле юзер, а отдавать либо гетером, либо лепить франкинштейнов в вьюхах где надо,
Юрий
Теоретически для этого можно юзать объекты Vue, но по-первых это кажется каким-то костылем, а во-вторых есть сомнения в плане производительности при создании множества объектов
Юрий
Зачем?
Что зачем?
Юрий
Хочется, иметь computed-свойства прямо на объекте
Юрий
Vue.set же есть, не подходит?
Подходит, но только для установки обзерваблов, а нужны ещё компьютеды
Nikita
Хочется, иметь computed-свойства прямо на объекте
@yarossl вроде бы ответил просто уже. Vuex, там же можно бить на модули. Или я совсем нуб?😄
Юрий
Мне vuex не нравится
Юрий
Чего ушел из Яндекса и мыла?
Работал в почте. Если коротко, то поприетарные технологии и деньги
Юрий
Ну и как-то профессиональный рост в определенный момент закончился
-
Доброго времени суток, господа. Подскажите, тут Nuxt так же обсуждают или для него отдельный канал какой то есть? (Не нашёл)
Юрий
Мне vuex не нравится
не вижу смысла во всех этих коммитах и экшенах
Nikita
Обсуждают
Чёт больше ругают)
Юрий
к тому же он предлагает работать с pojo's а я люблю классы
-
Чёт больше ругают)
Ругань тоже полезно послушать бывает. Благодарю)
Nikita
не вижу смысла во всех этих коммитах и экшенах
Написать своё хранилище) или поискать аналоги? Чисто предположение)