Куча говна / Говнокод #19683 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
// POST /login
exports.login = function login(req, res) {
    var email = req.body.email;
    var password = req.body.password;

    security.rateLimitRequest( 'reset', req, function( err ) {
        if ( err )
            return res.status( 400 ).send( err );
        db.Account.find({email: email, password: password}, function(err, account) {
            if ( err )
                return res.status( 400 ).send( err );
            account.getAccountStatistics(account, function(err, account) {
                if ( err )
                    return res.status( 400 ).send( err );
                account.incrementAccountLoginCount(account, function(err) {
                    if ( err )
                       return res.status( 400 ).send( err );
                    res.send(account);
                });
            });
        });
    });
});

У меня радость во все поля:

// POST /login
exports.login = function *login() {
    var email = req.body.email;
    var password = req.body.password;

    try
    {
        // Throws an error if rate limit exceeded
        yield security.rateLimitRequest( 'reset', req );

        // Query MongoDB for account
        var account = yield db.Account.find({email: email, password: password});
        account.statistics = yield account.getAccountStatistics(account);

        // Increment login count
        yield account.incrementAccountLoginCount(account);

        this.body = account;
    }
    catch( err ) {
        // Return the error as JSON
        return res.status( 400 ).send( err );
    }
});

Запостил: LispGovno LispGovno, (Updated )

Комментарии (177) RSS

  • ES2016? Что новенького, если вкратце? Кто уже поддерживает что-то полезное?
    Ответить
    • Хром и лиса вроде генераторы запилили, а там уж, как видишь, умельцы и до async\await добрались
      Ответить
    • Будет. Есть тысячи неосиляторов отладки этой питушни, пока это реализовано на уровне библиотеки
      Ответить
    • не будет

      Лет через семь-десять, когда все верстуны научаться
      Ответить
    • yield был давно в JavaScript (Firefox), но в ECMAScript не было.
      В ff несколько лет назад были и генераторы, и аргументы по умолчанию, и много прочей питушни.
      Ответить
  • Как гэта хуйня работает? Что значит звездочка?
    Ответить
    • > Что значит звездочка?
      Генератор. А работает так же как и асинхронка на генераторах в питоне.
      Ответить
      • А в каком месте генератор становится асинхронным кодом? В питоне приходилось лепить декораторы.
        Ответить
        • Генератор позволяет запустить кусок кода "параллельно" и хранить стейт. Он yield'ит некоторое условие, которого хочет дождаться. А планировщик из либы просто дёргает эти генераторы, когда условие выполнилось. Вот тебе и простейшая асинхронка.
          Ответить
          • Да-да, вот где указано, что генераторы надо юзать как асинхронный код?

            Если кто не понял о чем я - в питоне надо было для этого перед функцией указать специальный декоратор.
            Ответить
            • господи, какая же у тебя каша в голове

              как сложно наверное с тобой разговаривать, ты же слова не по назначению используешь

              что такое " генераторы надо юзать как асинхронный код"?
              Как можно вообще конструкцию языка юзать как код?
              И декоратор не делает никого асинхронным. Если ты о корутинах, то это понятие конкретной библиотеки
              Ответить
            • Дык, получается, декоратор там просто для защиты от дурака был?
              Ответить
                • заплачь, дай ему пощечину и вернись жить к маме
                  Ответить
                • Ну так объясни получше. А то я, дурак, думаю, что всё определяется контекстом использования генератора, а не какими-то маркерами на нём. Генератор - всего лишь стейтмашинка, у которой можно дёргать next/send, чтобы она сменила свой стейт и выдала какой-то результат.

                  Захотел сделать из него асинхронные корутины - сделал (см. код ниже). Захотел просто поюзать в фориче - поюзал. Но я, видимо, дурак, сишкоблядь, и не понимаю ДАО питона...
                  Ответить
                  • Надо как-то указать, что yeild надо понимать как await. Вот это и делает декоратор. Обеспечивает переключение контекста после yield.

                    Ты наверно не понимаешь как в питоне работают декораторы.
                    Ответить
                    • В моём коде ниже я что-то указывал, чтобы yield понимался как await? Но контекст, тем не менее, переключается. В чём ты можешь убедиться по логу.

                      > Ты наверно не понимаешь как в питоне работают декораторы.
                      Я прекрасно понимаю, как они работают.
                      Ответить
                      • >Надо как-то указать, что yeild надо понимать как await.
                        Т.е. это должна делать вызывающая сторона. Да, контеткстом использования. Где здесь этот контекст?
                        Ответить
                          • Я не понял, что ты хотел сказать. Ну ок, попробую ответить как понял.

                            Контекст использования в том моём коде - как аргумент функции Spawn() и как заyield'енное значение из генератора, который передали в Spawn(). Вот в этом контексте генератор используется как coroutine.

                            Или ты про контекст, который переключается? Тот контекст хранится внутри генератора в виде описанных в нём переменных (вспомним, что генератор - нихуя не функция, а объект-стейтмашинка). У каждого инстанса генератора - свой.
                            Ответить
                            • Что-то должно использовать генератор как сопрограмму. В этом гк этого кода нет.
                              Ответить
                                  • Ну ты же не видишь использования функции генератора из топика. Его либо через yield вернут из другого генератора, либо в какую-нибудь хуйню типа моего Spawn()'а передадут.
                                    Ответить
                                    • Это действительно твой код, или спиздел где?

                                      Б-Л-Я-Д-Ь, я и спрашиваю, блядь - где код который из генераторов делает асинхронный код?
                                      Ответить
                                      • > Это действительно твой код
                                        Ты про портянку на ideone, которую я кидал? Да, мой.

                                        > из генераторов делает асинхронный код
                                        Нету там такого кода. Есть код, который асинхронно по ивентам (т.к. код упрощён - только по таймеру) пинает генераторы, создавая иллюзию, что они исполняются параллельно друг с другом 🙂
                                        Ответить
                                          • > С каких пор ты на 3 питоне
                                            С тех пор, как не надо питонить в продакшен.

                                            > heapq
                                            Куча, структура данных такая (heap). Конкретно здесь юзается как приоритетная очередь, чтобы ближайший таймер искать.
                                            Ответить
                                            • даже в 15й убунте уже питон3 по умолчанию
                                              и почти во всех репах он есть
                                              даже в сраных редхатообразных в EPEL есть
                                              Ответить
                                              • И даже если нет - его можно поставить. Я в курсе, гость.
                                                Ответить
                                                  • Собрал как-то, как на офсайте советовали. Потом пип ставил модули не в тот каталог откуда их читал питон или еще какая-то хуйня приключилась. Прыщештабильность, че.
                                                    Ответить
                                                    • Стабильность это использовать менеджер пакетов из дистрибутива. А если ты собираешь руками, то нужно указывать пути в --configure.

                                                      поди-ка мне под винду поставь пистона с mod_wsgi, apache, и всеми нужными либами типа libssl32.
                                                      Ответить
                                                      • Постой, но надо мне было поставить питон - я и прочитал инструкцию на сайте. А так я уже не помню, почему не заюзал apt. По-моему, последней версии 2.х там не было.

                                                        А что до винды - это проблемы прыщеговна.
                                                        Ответить
                                                        • На свете существует более шести сотен линуксов
                                                          Они все делятся на deb-based, rpm-based, а еще есть gentoo и arch.

                                                          Ты реально хочешь чтобы для всех шести сотен на сайте было написано как это ставить?

                                                          "Последней двойки" могло не быть в твоей репе, а не в aptе.
                                                          Апт это клиент репы. Найди правильную репу и все.

                                                          И причем тут прыщеговно? Ты пистон прыщеговном назвал?
                                                          Ну давай тогда, поставь мне пред-последний MS-SQL на Windows-7 и последнюю студию. А потом удали случайно .msiку из c:\windows\Installer и попробуй обновиться на последний SQL.

                                                          Поразгребаешь бесконечные "unknown error" с вот такими вот логами: https://justpaste.it/ovlj
                                                          А потом расскажешь мне про прыщи
                                                          Ответить
                                                          • Я в душе неебу что у тебя за проблемы с вендой, я даже не исключаю, что есть вендоговно. Но питон - абсолютно однозначно прыщеговно. С какой-нибудь жавой даже близко нет такого количества проблем на винде, особенно если сравнить с прыщами.

                                                            По крайней мере, в винде софт ставится по принципу "скачай экзешник - запусти", это может осилить любой школьник. А тут, видите ли, я что-то не так поставил.
                                                            Ответить
                                                            • >>Я в душе неебу что у тебя за проблемы с вендой
                                                              очевидно ничего сложнее контр-страйка ты никогда не ставил

                                                              Знаешь как напрмиер .net подключить к IIS на Win2003?

                                                              >> С какой-нибудь жавой даже близко нет такого количества проблем на винде
                                                              особенно когда там ставится JDK и JRE, и в итоге у тебя две разных java.exe и две разных хранилки ключей и сертификатов. В итоге люди едят говно когда не понимают почему у них HTTPS не работает например

                                                              >>"скачай экзешник - запусти"
                                                              ты в винде не силен, видать
                                                              во-первых давно уже крупные пакеты используют MSI
                                                              Во-вторых если ты будешь ставить тот же MS-SQL, то узнаешь что там есть prerequrements, и вот там тебя могут попросить и .net обновить и CRT поставить (а CRT бывают разные, от разных студий, и не дай бог тебе поставить бету! Потом нихуя ее не удалишь нормально и не обновишь)

                                                              И наконец в десятке есть уже OneGet.

                                                              А вот на линуксе как раз все просто: сами качаются депенденсы.
                                                              Даже школьник справится.
                                                              Ответить
                                                              • Профессиональным вендоблядством я не занимался, но блядь есть же инсталлятор для того же питона на венде.

                                                                >особенно когда там ставится JDK и JRE, и в итоге у тебя две разных java.exe и две разных хранилки ключей и сертификатов. В итоге люди едят говно когда не понимают почему у них HTTPS не работает например
                                                                Но запускается только та что в path? Алсо какое это отношение имеет к пользователям?

                                                                Про msi в курсе, чем он отличается от exe с точки зрения пользователя?

                                                                OneGet это что?

                                                                >А вот на линуксе
                                                                Ты про apt-get? Ну нету там нужной мне версии, а дальше что? Хуяк-хуяк, pip не работает, начинаем ебсти себе мозги?
                                                                Ответить
                                                                • >>Профессиональным вендоблядством я не занимался

                                                                  Понятно. Винду ты не знаешь, линукс ты не умеешь. Чтож ты умеешь тогда?

                                                                  >>Но запускается только та что в path?
                                                                  Да, но keystorage у них разное.

                                                                  >> Алсо какое это отношение имеет к пользователям?
                                                                  Никакой. А вот к программистам на жабе -- очень даже.

                                                                  >>OneGet это что?
                                                                  Это попытка сделать обертку вокруг chokolatey и других пакетных менеджеров для венды на пауершелле. Гугл в помощь тебе

                                                                  >>Ты про apt-get? Ну нету там нужной мне версии, а дальше что?
                                                                  Значит пошел в /etc/apt/sources.list.d и добавил репу с нужной версией
                                                                  Ответить
                                                                  • Что значит "не знаю"? Как пользователь я ее знаю, админством не занимался.

                                                                    >Да, но keystorage у них разное.
                                                                    Как возникла проблема? Запускаться будет постоянно одна и та же жава.

                                                                    Программисты свои проблемы как-нибудь решат. Я, например, удалял лишние jre которые тащила с собой жава (кстати, нахера?). Реальные проблемы возникают, когда у пользователей автоматом не ставятся нужные модули. Не будешь же им объяснять, как пользоваться пипом?

                                                                    На винде есть пакетные менеджеры? И как оно?

                                                                    >Значит пошел в /etc/apt/sources.list.d и добавил репу с нужной версией
                                                                    Если ты такой умный, чего строем не ходишь? Я как малоопытный пользователь поставил из исходников - и получил проблему. А на винде бы такого не было.
                                                                    Ответить
                                                                  • > Значит пошел в /etc/apt/sources.list.d и добавил репу с нужной версией
                                                                    И через месяц огреб при обновлении оси, тк добавил не официальные репы.
                                                                    Ответить
                                                                    • Я здесь еще напомню, как поставил transmission на нас по инструкции, добавив репозиторий. Потом решил поставить питон, появился конфликт, я от безысходности нажал "разрешить", обновилась libc и я остался без наса на пару месяцев.
                                                                      Ответить
                                                          • > А потом удали случайно .msiку из c:\windows\Installer и попробуй обновиться на последний SQL.
                                                            А потом совершенно случайно отформатируй винт и попробуй обновиться на последний SQL.
                                                            Ответить
                                                            • Кстати, а какого хрена всякое говно вроде винды и жавы хранит msi где-то на системном разделе? У меня ssd с хронической нехваткой места, дороговато, блядь, на нем всякую срань хранить.
                                                              Ответить
                                                              • а где им их хранить? Винда должна каким-то магическим образом понять что нужно хранить на другом диске?
                                                                Есть один способ научить ее: перенести папку и сделать hard link.

                                                                но ты видимо и в винде нуль, как и в линухе
                                                                Ответить
                                                            • ой, не пизди дурак
                                                              MSIки удаляются при очистке диска

                                                              Да и без удаления попробуй обновить бету студии на новую, ггг
                                                              Ответить
                                          • Исполняемый код имхо желательно держать в конце (у тебя создается объект сразу после объявления)
                                            Ответить
                                      • > из генераторов делает асинхронный код
                                        Ну или можешь им считать Spawn(), который возвращает объект, который дёрнет коллбек, когда генератор бросит StopIteration.
                                        Ответить
                • Надо такой на гк повесить чтобы гости хуйню не писали.
                  Ответить
            • декоратор в питоне одно, а конструкция языка - более общее понятие. Так вот то, что ты называешь декоратором - не он
              Ответить
        • >>А в каком месте генератор становится асинхронным кодом?
          ой мама родная

          поди почитай про yield from и asyncio
          Ответить
        • http://ideone.com/0pVEwD

          Или этот код недостаточно асинхронен?

          З.Ы. Не обращай внимания на луп и его остановку. В боевом сервере там бы сокеты опрашивались и т.п. Здесь он просто для примера.
          Ответить
          • Теперь тебе еще придется объяснять ему про event loop и кооперативную многозадачность на одном потоке
            Ответить
            • Да как всегда окажется, что у нас с ним разные понятия об асинхронности кода.
              Ответить
              • Наверняка он путает многопточный код, параллельный и асинхронный

                Все путают
                Ответить
                • >> многопточный код

                  Чет мне кажется многопоточное, все-таки, программирование, ну, или программа

                  Параллельный - код

                  А асинхронный - вызов метода (ну или функции, набора инструкций, не суть)
                  Ответить
                  • Да, так лучше, ты прав.

                    Многопоточное -- использующее более одного потока исполнения (довольно тонкая грань между многопроцессным, особенно на linux)

                    Параллельный (конкурентный) -- выполняющийся параллельно (строго говоря может быть и на другой машине)

                    Асинхронный -- неблокирующий вызов с колбеком (может быть на другом треде)

                    Фишка в том, что для того чтобы асинхронно вызывать метод или иметь параллельные вычисления, вовсе не обязательно возиться с многопоточностью

                    Потоки всего лишь одна из реализаций
                    Ответить
                    • > Параллельный (конкурентный)
                      >> Все путают

                      Включая тебя, Гость. Погугли concurrency vs parallelism.
                      Ответить
                      • ничего что слово "concurrent" переводится как "параллельный"?
                        Ответить
                        • > ничего что слово "concurrent" переводится как "параллельный"?

                          "А ни чего, что у меня парень работает в Майкрасофт и на него молятся пол Украины Ит-шников?" (c)

                          Гость, я тебя вычислил. Это ты переводишь книжки по IT гуглотранслейтом, превращая их в нечитаемое говно.
                          Ответить
                            • > Гость владелец издательства "Питер" ?

                              Почему сразу владелец? Переводчиком скорее подрабатывает.
                              Ответить
                                • Ну типа. Я на хабр хожу только если мне кто-то ссылку кинет...
                                  Ответить
                                    • В аське (да, во вконтакт я хожу раз в квартал, скайп запускаю только если попросят, а ватсапов и прочих хуиберов у меня нет)...
                                      Ответить
                                      • Штоблядь? Новости? В аське?

                                        Аську надо дропать. У меня контакт пропал, потребовало типа прикрепления телефона к уину для того чтобы ему писать (баг какой-то)
                                        Ответить
                                        • > Новости? В аське?
                                          Да, использую друзей как фильтр новостей 🙂

                                          З.Ы. Ну а если ты про политические новости - на 99% от тебя на ГК...
                                          Ответить
                                          • Нет, про it. А что ты делаешь когда не хочешь их читать?
                                            Ответить
                                            • > когда не хочешь их читать
                                              Не читаю, лол. Логи же всегда остаются, если вдруг всё-таки захочется прочесть.
                                              Ответить
                                              • У друзей отдельные акки с которых они пишут новости? Иначе как ты отделяешь новости от остального?
                                                Ответить
                                                • > как ты отделяешь новости от остального
                                                  У меня там не такой поток, чтобы отделять было мучительным и долгим занятием... Ну и ссылки всякие на фоне других сообщений видно же.
                                                  Ответить
                          • Я не знаю, Ром, кто твой парень, и вообще не понимаю причем тут твоя личная жизнь.

                            Но это слово действительно так переводится.
                            От того что какой-то анонимный пидар на стековерфлоу придумал свою классификацию, из которой следует что задачи пеерсекающиеся и не пересекающиеся по времени относятся к разным типам, вовсе не значит что перевод поменялся

                            ну хотя может быть для тебя с твоим парнем анонимные пидары на SO и авторитеты, не знаю
                            Ответить
  • Если они уже начали пиздить фичи из питона, то лет еще через 5 может появиться нормальный await
    Ответить
  • Алсо, шкриптоблядки. Напишите-ка мне без await такую хрень:
    for (i=0; i<n; i++) {
        doSomething(i);
        sleep(time);
    }
    Ответить
    • for (i=0; i<n; i++) {
          doSomething(i);
          WScript.Sleep(time);
      }

      #WSH #JScript #ВыбериЯзыкПодЗадачу
      Ответить
    • var sleep = require('sleep').sleep;
      
      for (i=0; i<n; i++) {
          doSomething(i);
          sleep(time);
      }

      Один мужик прикрутил сишный слип как модуль к ноде.
      npm install sleep
      Ответить
      • А теперь представь как этот мужик заменит sleep() на system("rm -rf")
        Ответить
        • Я после недавних новостей боюсь использовать модули node.js
          Ответить
          • Так их же можно один раз скачать (при желании - даже скомпилировать вручную, если нативный питух есть) и использовать всегда.
            Ответить
          • >open-source
            >боюсь использовать

            Это ж не хром, не скайп и не прочая мелкопитушня с шифрованным автообновлением.
            Ответить
            • >open-source
              >боюсь использовать
              >хром

              Алсо у меня замечательно был случай, когда установленный модуль обновил одну библиотеку, которая оказалась нерабочей, после чего у меня в момент отвалились все проги юзавшие эту библиотеку. Старую версию я не помнил.
              Ответить
              • Уж сколько раз твердили миру о вреде перманентного автоапдейта.

                Работает? Не трогай.
                Полез? Не жалуйся.

                >хром
                Его упомянул как монструозную софтину на миллиарды строк, которые никто не осилит прочитать. В отличие от небольших npm модулей.
                https://bugs.chromium.org/p/chromium/issues/detail?id=500922

                К тому же хром=опесорцный хромиум+фирменные проприетарные фичи.

                Так вот. Одной из таких фич является бэкграунд процесс Google Update. А так же отправка гуглу шифрованной питушни о твоем компе со свалки. И еще дырявый флеш.

                Google Chrome != open source
                Ответить
                • Куда, блядь, полез? Ты читать умеешь? Я модуль поставил, он сам зависимость обновил. Не подскажешь как это поведение изменить?

                  >И еще дырявый флеш.
                  Пиздец интересно слышать это от вендобляди.
                  Ответить
                  • >Не подскажешь как это поведение изменить?

                    Кончено подскажу. Для начала попробуй перестать пить мочу.

                    >Пиздец интересно слышать это от вендобляди.
                    3_14dar, ты аутотренингом решил чтоле заняться, срамной нищеброд гы-гы-гы :))
                    Уже весь ГК заполонило твоё неосиляторство.
                    Ответить
                    • Что ты несешь, петух блядь? Флеш в хроме такой же как в любом другом браузере.

                      И неосилятор здесь ты.
                      Ответить
                      • 3_14dar здесь только ты 🙂

                        Пидарок, не гори так, ггг. А то будет как прошлой весной. Ты тогда по ходу не один стул сжёг.
                        Ответить
                        • Питушилка, ну расскажи мне, как сделать, чтобы модули не обновляли зависимости, и насколько популярно такое действие среди питонистов.
                          Ответить
                          • >и насколько популярно такое действие среди питонистов.

                            >ну расскажи мне, как сделать, чтобы модули не обновляли зависимости

                            Простая пошаговая инструкция, специально для тебя:
                            1. Используй менеджеры пакетов/зависимостей
                            2. Перестань пить мочу
                            3. Напитон, 3_14dar, напитон
                            Ответить
                            • Ыыы, клоун, ты обосрался. Я и юзал пип. Надо поставить памятник твоему обосрамсу.

                              Зря я твой ник из игнора достал.
                              Ответить
                      • > Флеш в хроме такой же как в любом другом браузере.

                        Нет. Флеша существует аж три штуки:

                        1. Модуль для ActiveX. Используется в Интернет Эксплорере.

                        2. Модуль для NPAPI. Используется в браузерах.

                        3. Модуль для PPAPI. Используется в Хроме.

                        Это не просто интерфейсы. Реально устанавливается три разных плеера.
                        Ответить
                        • Не советую тратить бисер. Эту тупость не прошибить ни фактами, ни формальной логикой. Чего стоит одно:
                          >open-source
                          >хром
                          Ответить
                          • 3_14dar 6 дней назад # 0
                            Нахуй иди с таким кодом

                            >сейчас напишет ещё чтобы проц не нагружало
                            Нет. Просто нахуй.

                            3_14dar 6 дней назад # 0
                            Надо такой на гк повесить чтобы гости хуйню не писали.

                            3_14dar 14 минут назад # 0
                            Иди нахуй уже

                            3_14dar 12 минут назад # 0
                            Ну И Хуй?
                            Ответить
        • Обидно будет.
          Кстати, мужики могут в самой ноде все функции на system("rm -rf") заменить.
          Или в обновлении ОС такое придёт.
          Или какую-нибудь питушню забабахают, чтоб вентиляторы в случайное время отключились.
          Так что мир обречён. И деньги фиатные.
          Ответить
          • > Или какую-нибудь питушню забабахают, чтоб вентиляторы в случайное время отключились.

            Нвидиа впереди планеты всей.
            Ответить
    • http://ideone.com/0pVEwD

      См. функцию foo(). В этом коде её запустили 2 раза в параллельных "потоках". И без единого await'а (yield же не считается за await?).
      Ответить
      • На жс в браузере, блядь. Я думал из темы гк будет понятно.
        Ответить
        • Сам не можешь этот код с пистона мысленно портануть? Ну ок, ок, сейчас портанём...
          Ответить
            • > И без эмуляции через генераторы.
              Тогда никак. Если не юзать генераторы (или их эмуляцию через препроцессинг типа Babel'а), то никак. Хуярь лапшу.
              Ответить
                • Ну были бы макросы и свич как в сишке - можно было бы накостылить...

                  А так, если в языке нету способа описать конечный автомат, выглядящий как функция (аля yield или async/await) - никак.
                  Ответить
                • Ну есть страшный способ - получить исходник функции (жс, емнип, позволяет), построить AST и собрать на его основе конечный автомат (или лапшу из коллбеков), по смыслу похожий на функцию.
                  Ответить
                  • А с каких пор генератор = конечный автомат, а не машина тьюринга?
                    Ответить
                    • Ну если занудствовать, то стоит вспомнить, что реальный компьютер конечен и полноценной машиной Тьюринга быть не может.
                      Ответить
                      • Упоминая абстрактные автоматы, имеют в виду, что устройство/алгоритм может то же самое, что они. Короче, хз как тут правильно ответить, кто поможет?
                        Ответить
        • > На жс в браузере, блядь
          Так бы сразу и писал.

          function sleep(time) {
              var timer = Date.now();
              while(Date.now() - timer < time);
          }
          function doSomething(i) {
              console.log('kokoko', i);
          }
          for (i=0; i<5; i++) {
              doSomething(i);
              sleep(1000);
          }


          сейчас напишет ещё чтобы проц не нагружало
          Ответить
          • while(Date.now() - timer < time);

            Нахуй иди с таким кодом

            >сейчас напишет ещё чтобы проц не нагружало
            Нет. Просто нахуй.

            Алсо что будет если заблокировать поток в js в браузере? Что зависнет - одна вкладка, или весь брауер?
            Ответить
            • В нормальных браузерах — вкладка и браузер предложит убить скрипт. ИЕ не пользуюсь.
              Ответить
              • На хабре писали недавно, как можно заблокировать внутри встроенной функции, тогда виснет целиком браузер.
                Ответить
                • Это в каких браузерах работает? В хромобраузерах по процессу на несколько вкладок же.
                  Ответить
                  • > В хромобраузерах по процессу на несколько вкладок же.
                    Кстати, если плохая сеть, то тормозят они все вместе (блокируются в ожидании чуда).
                    Ответить
                    • Кто они? Вкладки сидящие на одном процессе? Но не весь браузер же?
                      Ответить
                      • Точно не известно. Выглядело как зависание всего браузера (может, только какой-нибудь главный процесс).
                        Если при зависании скрипта можно переключить вкладку, то тут хром просто не реагировал, пока сеть не стабилизировалась или не отключалась до конца.
                        Ответить
            • Нет блять, я этот код реально буду использовать, прикинь.

              Ты что шутки от серьёзных вещей не можешь отличить?
              Ответить
    • Ну предположим можно сделать setTimeout() на себя, а дальше надо как-то хранить состояние.
      Ответить
    • Ну конкретно этот пример можно сделать. Тут результаты doSomething не юзаются, можно просто запихать все блокирующие действия в очередь, вернуть управление, да разгребать очередь какой-нибудь хернёй с setTimeout.
      for (i=0; i<n; i++) {
          if (doSomething(i))
              break;
          sleep(time);
      }
      Вот такой пример надо. Тут результат юзается, очередью уже не выкрутишься.
      Ответить
      • > конкретно этот пример можно сделать

        Мне одному кажется, что конкретно этот пример реализуется тривиально?
        (function doAndWait(i, n) {
            if (i == n) return;
            doSomething(i);
            setTimeout(function () { doAndWait(i + 1, n); }, time);
        })(0, n);
        Ответить
        • > этот пример реализуется тривиально
          Ну блин. Этот пример тут просто для простоты. Не писать же тут какую-нибудь бизнес логику с десятком запросов в теле, как в топике.

          Понятно, что всё это можно руками превратить в херню-с-коллбеками... Но ведь "блокирующий" код с async/await пишется и ревьювится намного проще...

          З.Ы. Часто и комбинаторов хватает типа sequential(), parallel() и т.п. Но не всегда.
          Ответить
        • Я это выше написал. Но если нужно любое хранение состояния, то приходится выкручиваться, читаемость тоже падает.
          Ответить
          • Поскольку в пиздожс нет биндинга, придется в качестве параметра прокидывать self.
            Ответить
      • > Вот такой пример надо.

        Адаптировал код под твой пример:
        (function doAndWait(i, n) {
            if (i == n || !doSomething(i)) return;
            setTimeout(function () { doAndWait(i + 1, n); }, time);
        })(0, n);
        Ответить
    • Это не полностью выдуманный пример, примерно так выглядят какие-то пошаговые эффекты.
      Ответить
      • Ну задачка, где тебе надо последовательно что-то сделать (и последовательность не зависит от результата самих действий, как максимум - просто прерывается при фейле одного из них), она намного проще, чем общий случай.

        Как я выше писал - "блокирующие" функции просто ставят свою побочку в очередь, которая разгребается по setTimeout или коллбекам о завершении.
        Ответить
        • Ну пусть хотя бы это напишут, без велосипедных копипастных хелперов.
          Ответить
          • А нафиг теперь, когда в браузеры уже вот-вот завезут генераторы, а для текущих версий есть транслятор всех новых фишечек жс в говнокод (babel)?
            Ответить
            • Чтобы ткнуть отсталых жсблядей рылом в их говно? Это нормальным людям было всегда понятно, что без foreach и асинхронного кода в браузере не жить.
              Ответить
  • Полностью от лапши не избавились же - все равно код не плоский.
    Ответить
    • https://hacks.mozilla.org/2016/01/web-push-arrives-in-firefox-44/

      Да вы заебали. Ну сколько можно
      async function registerForPush() {
        // Register the Service Worker
        let registration = await navigator.serviceWorker.register('service-worker.js');
        
        // Check if we already have a subscription
        let subscription = await registration.pushManager.getSubscription();
        
        // If not, try to subscribe.
        if (!subscription) {
          subscription = await registration.pushManager.subscribe();
        }
        
        // Save the subscription data on our website's backend.  
        await fetch('/save-push-endpoint', {
          method: 'post',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify(subscription)
        });
        
        // Done! Now our backend can send Push messages by POSTing to subscription.endpoint!
      }
      Note: This code sample uses ES7’s draft async/await syntax, since it reads most clearly. To use this in production, check out the equivalent in plain JavaScript.
      Ответить
      • >: This code sample uses ES7’s draft async/await syntax, since it reads most clearly. To use this in production, check out the equivalent in plain JavaScript.
        Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8