Ivan
чтобы не юзать new
Нет, это не объяснение.
Sergey
Нет, это не объяснение.
ниже сообщения почитать лень?
Sergey
и если сейчас не поставишь себе имя я тебя забаню
Sergey
const factory = createFactory(createServer)
вот такой кейс часто юзают это лучше чем const factory = createFactory( listener => new Server(listener) )
Ivan
Я посмотрел на устройство модулей и уже разобрался, сейчас кину пару скринов.
Ivan
Это весь модуль http, т.е. там просто в отдельные файлы вынесено.
Sergey
Это весь модуль http, т.е. там просто в отдельные файлы вынесено.
очевидно, что надо смотреть как юзаются эти функции
Sergey
но опять, же, скорее всего, чтобы не заставлять юзать new
Иван
Всем привет. Возможно глупый вопрос но всетаки задам . Есть функция которая дергает поиск в Nedb . по всей видимости поиск асинхронный. Каким макаром получить результат выполнения поиска в основном коде ?
Иван
Пример select_db = function (id) { second= db.find({id: id}); return second };
сomorsiс
сделай чтобы функция была async/ верни промис
Cenator 🐈
Promise/async/await
Иван
и отловить в then ?
Иван
В питоне все намного проще )))
Cenator 🐈
A
вопрос, есть приложение koa, отдаёт статику (assets) и срендереный реакт. При этом при попытке перейти по урлу в браузере, вместо того чтобы сработал react-router, работает серверный роут. Как преодолеть?
A
нагуглил только совет отдавать статику c nginx
Cenator 🐈
Но статику лучше через nginx отдавать
A
https://gist.github.com/alextorn/255013f01109407ad8d1e070aa1569eb
A
вот мой пример
A
при попытке в браузере кликнуть на линку реакт-роутера, срабатывает staticMiddleware() и ищет, например, blog в папке с ассетами
A
типа вот так: { Error: ENOENT: no such file or directory, stat '/Users/AlexanderTorn/Sites/bs/build/blog'
Cenator 🐈
A
спасибо кэп) чо делать?
Cenator 🐈
A
окей. задам вопрос по другому, как люди отдают ассеты с севера? кроме варианта с nginx
Cenator 🐈
koa-static вроде
A
koa-static вроде
а это не одно и тоже?
Cenator 🐈
а это не одно и тоже?
https://pastebin.com/vYQswULz
Cenator 🐈
У меня работает
Sergey
Зачем это сделано?
Чтобы не менять по всему проекту new Server на new SuperServer когда класс поменяется
Sergey
Почитай про фабричный метод
Иван
солушайте . а есть у вас пример обработки массива через промис функции . но чтобы все елементы массива обрабатывались по очереди ?
сomorsiс
ты с чистыми промисами или bluebird?
Иван
чистыми
сomorsiс
с чистыми for(....) { await do_smth()}
сomorsiс
только не форич а именно фор
Иван
работать будет от седьмой ноды насколько понимаю ?
сomorsiс
есть еще один вариант, но его больно читать
Иван
а воообще вот мне одно непонятно . Если мне хочется и нужно обработать несколько связных запросов . Например 10 . То в питоне достаточно дергать функцию получать данные и идти дальше . В яваскрипте приходится гирлянду промисов писать . Насколько понимаю специфика языка просто не предусматривает что то выполнят синхронно ?
сomorsiс
да, синхронно - плохо
Иван
от предыдущего в том то и дело
сomorsiс
тогда чейни
сomorsiс
rp0(...) .then(x=> rp1(x, awdawd)) .then(x=> rp2(x, 12))
сomorsiс
//образно
Иван
если независим то все понятно . тут как раз удобней . Ну тогда и получается если мне один из запросов в цепочке выдает массив для обработки , то я вынужден либо сеттаймаут делать при обработке либо все запросы дружною толпой идут по одному адресу . А если их около 10к ))) спасибо добрым людям сейчас попробую асинк использовать . как раз обновил ноду с шестой на восьмую . Но я бы сказал дико не привчно мне чайнику )
сomorsiс
возьми bluebird
сomorsiс
это очень хорошая либа
сomorsiс
там есть методы для асинхронной обработки коллекций
Иван
Дк сначала бы научится и главное понять смысл на чистом ноде . а дальше уже использовать всякие удобства ) но за наводку спасибо почитаю
сomorsiс
всмысле она расширяет промисы
сomorsiс
и потом будет неприятно от осознания что некоторые вещи сделать проще чем есть
сomorsiс
хотя async/await по сути похожие удобства предлагает, просто немного в другой форме
Sergey
всмысле она расширяет промисы
Главное не заменять глобально
Иван
Кстати пока не забыл последний вопрос который мозг ломает мне )) . В ноде просто так не получится дернуть функцию получить ответ и дальше идти ? Если это асинхронная функция(а 99.99% всего в ноде асинхронно) , то мне придется опять же использовать async/await либо .then чтобы отловить значение . Вообще эта муть с асинхронностью насколько понимаю идет от того чтобы не вешать браузер пока код скрипта выполняется ?
сomorsiс
а в чем проблема юзать асинхронность везде (кроме функций не общающихся с внешним миром)?
Иван
в том что следущая команда которая должна использовать результат предыдущей еще не знает этот результат , но уже выполняется ( . Пока что моск плавится от этого. Делать какието цепочки только ради того чтобы обработать данные . Когда посути асинхронность и не нужна в данный момент . Вообщем не привык я еще к яваскрипту ))))
сomorsiс
представь что уже знает
Anonymous
Есть чатик по линуксу?
сomorsiс
только сперва собрать надо)
Anonymous
Ну я ж не генто спрашиваю
сomorsiс
Есть чатик по линуксу?
https://github.com/goq/telegram-list
Иван
с чистыми for(....) { await do_smth()}
спасибо ! По итогу работает . const makeRequest = async () => { for(var i = 0; i < d.length;i++ ) { await getJSON(d[i])} return "done" } в таком варианте
сomorsiс
а почему не параллельно?
сomorsiс
а, точно, у тебя там какая-то последовательная зависимость
Иван
Мне и надо чтобы последовательно было
Иван
как раз подобного модуля очень не хватало
Иван
есть приложение , кторое не держит больше 70 запросов в секунду . а пульнуть надо примерно 2100 запросов . Ранее приходилось SetTimeOut'ами разруливать . сейчас получится данным костылем .
Иван
но всеравно как то не красиво и не правильно
Алексей
Привет всем
Алексей
Тут фигня какая-то, не могу зареквайрить path
Алексей
Пишу const path = require('path')