by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    SilentImp
    @SilentImp
    cделал PR
    Eldar Djafarov
    @edjafarov
    смержил
    SilentImp
    @SilentImp
    Кстати, а у тебя собирается статистика с репозитория?
    Интересно сколько людей зашло в репозиторий промиспайпов после публикации статьи
    Eldar Djafarov
    @edjafarov
    ты там можешь глянуть
    SilentImp
    @SilentImp
    где?
    SilentImp
    @SilentImp
    ноуп :)
    я же не owner
    меня бросает на https://github.com/ и все ;)
    Eldar Djafarov
    @edjafarov
    хм, я думал оно открытое
    SilentImp
    @SilentImp
    Ретвитни.
    Может ещё немножко людей набежит https://twitter.com/SilentImp/status/624199998398447616
    Eldar Djafarov
    @edjafarov
    Screen Shot 2015-07-23 at 3.52.48 PM.png
    SilentImp
    @SilentImp
    да, не очень :)
    Попробуй на kyivJS сделать мастеркласс ;)
    Само комьюнити не набежит.
    Eldar Djafarov
    @edjafarov
    так и буду делать, я сейчас буду делать примеры с ангой, и реактом
    Senin Roman
    @Rastopyr
    Большой трафф будет с хабра
    Если статья о ПП попадет в дайджест веб-разработки
    SilentImp
    @SilentImp
    zfort редко статьи FM пропускает
    Eldar Djafarov
    @edjafarov
    я не очень люблю хабр
    я сознательно выбрал Фронтендер, да и Импа крутой
    SilentImp
    @SilentImp
    :blush:
    Eldar Djafarov
    @edjafarov
    Благодаря Импе я теперь знаю как мануальчики писать:)
    SilentImp
    @SilentImp
    =^_^=
    Да, мануальчики это важно :smile:
    Eldar Djafarov
    @edjafarov

    Внезапно Роутер на промиспайпах получается очень ничего
    https://github.com/edjafarov/PromisePipe/tree/master/example/PPRouter

    PPRouter.use(ExpressAppAdapter(app));
    or
    PPRouter.use(HistoryApiAdapter);
    
    PPRouter(function(PPRouter){
      PPRouter('/posts', function(PPRouter){
        PPRouter('/:id’).component(comp3).then(doAction5).then(doAction6)
      }).component(comp2).then(doAction3).then(doAction4)
    }).component(comp1).then(doAction1).then(doAction2)

    comp1,comp2,comp3 - не обязательно должны быть РеактКомпонентами
    Это просто функции, при рендере которые получают объект в качестве аргумента такого вида

    {
      params: // параметры из урла,
      queryParam://квери параметры
      mask://маска урла
      data://результат своего промиспайпа (для комп1 это будет результат .then(doAction1).then(doAction2) итд)
      children://это результат нестед компонента
    }

    тоесть подефолту туда можно вставлять реакт компоненты
    а можно и просто функции которые используют этот апи и рендерят из любого темплейта или строки

    Адаптеры - адаптируют работу роутера к энвайроменту. Адаптер вешает свои хендлеры на окружение и дергает роутер если нужно при изменение роута адаптер меняет окружение(например строку браузера)

    из адаптеров которые приходят в голову:

    • express/http
    • browser history API
    • cli generator
    Eldar Djafarov
    @edjafarov
    из проблем -
    1) router.js на основе которого PPRouter - имеер весьма отстойную инфраструктуру - он не запаблишен в НПМ и не совместим с коммонжс нодовским из коробки
    2) у роутержс есть метод handleUrl который я использую, он возвращает промис - и это круто, но через него нельзя передать контекст, и это отстой :(, в простых случаях это не нужно, но для тру изоморфности нужно иметь возможность выполнять хендлеры в разных контекстах
    SilentImp
    @SilentImp
    А нельзя связаться с автором router.js и попросить его опубликовать его в npm или на худой конец сделать это самому?
    Он мантейнится или мертвенький?
    Андрей Листочкин (Andrey Listochkin)
    @listochkin
    @edjafarov пиши примеры на es6 и async .. await может получиться весьма недурно
    SilentImp
    @SilentImp
    только не забывай в примерах по es6 четкое описание как их запускать
    и минимум псевдокода
    Eldar Djafarov
    @edjafarov

    Он мантейнится или мертвенький

    он полуживой, но поидее достаточно хорош, учитывая что его юзает эмбер

    @edjafarov пиши примеры на es6 и async .. await может получиться весьма недурно

    ПромисПайп он вообще больше похож на реактивные стримы, потому с асинк авейтом скорее несовместимы, разве я что не понимаю

    тоесть реально из ес6 +- можно эрроу функции и промисы юзать:)
    для изморфности нужен коммон жс, или есть полифилы для ноды?
    Eldar Djafarov
    @edjafarov

    только не забывай в примерах по es6 четкое описание как их запускать

    это да:)

    Eldar Djafarov
    @edjafarov

    2) у роутержс есть метод handleUrl который я использую, он возвращает промис - и это круто, но через него нельзя передать контекст, и это отстой :(, в простых случаях это не нужно, но для тру изоморфности нужно иметь возможность выполнять хендлеры в разных контекстах

    похоже мне удалось побороть эту проблему, немного вычурно, но вся хрень спрятана под капотом, так что ок.

    сегодня поиграюсь - сделаю экземпл
    Eldar Djafarov
    @edjafarov
    ФАК:( роутержс не работает в стейтлес режиме:(
    Eldar Djafarov
    @edjafarov
    но я вроде поборол:)
    Eldar Djafarov
    @edjafarov
    я придумал как по пайпу передавать файлы
    edjafarov/PromisePipe#32
    FormData объект будет на сервере превращаться в нодовый стрим
    который можно например запайпить в ФС, если переход чейнов будет между 2мя серверами - стримы будут пайпиться паралельно и прокидываться в следующий энв
    тоесть будет прозрачная работа с бинарниками
    Eldar Djafarov
    @edjafarov
    https://github.com/edjafarov/http-connector - вот получилось сделать коннектор который будет прокидывать файлы на сервер
    в объект ложишь File объекты и посылаешь в пайп
    на бекенде вместо файл объектов получаешь нодстримы файлов их можно пайпануть дальше куда хочешь
    помимо этого работает таймаут edjafarov/PromisePipe#8
    и мемоизация/кеширование edjafarov/PromisePipe#21 - кеширование работает так
    var cache = {};
        var cacher = function(data, context, result){
            if(!cache['id:' + data]){
                cache['id:' + data] = result;
            } else {
                return cache['id:' + data];
            }
        }
    
    
        fn2._env = 'server';
        fn3._env = 'server';
        fn4._env = 'server';
    
    
        var pipe = PromisePipe()
                .then(fn1)
                .cache(cacher)
                .then(fn2)
                .then(fn3)
                .then(fn4)
                .then(fn5);
    кешер решает закеширован результат или нет
    третий параметр кешера - это промис, он ресолвится когда серверная цепочка возвращает результат
    только в случае если кешер вернул андефайнд - тоесть в кеше нет занныъ