Rafael 🌵
Да вопрос все тот же, как избавиться от асинхронности и писать код последовательно, а не оборачивая в then и функции.
У тебя есть цепочка промисов, ты можешь в нужный then() передать функцию, исполнение которой ты ожидаешь после резолва промиса
Rafael 🌵
Если ты ожидаешь выполнения сразу нескольких функций параллельно, и только после этого запустить свою, то у тебя есть Promise.all()
Rafael 🌵
никак
Удваиваю
Sergey
да и вообще, js однопоточен параллельности нет, всё на событиях под капотом
Михаил
И снова все приходится делать самому. В javascript завезли критические секции, семафоры, мьютексы или другие типы блокировок?
Евгений
Нет. А что ты блокировать хочешь? У тебя не будет гонки никогда.
Igor
https://www.youtube.com/watch?v=8aGhZQkoFbQ мне помогло разобраться с подобными вопросами
Rafael 🌵
https://www.youtube.com/watch?v=8aGhZQkoFbQ мне помогло разобраться с подобными вопросами
В виде текста это есть? Вообще что гуглить на эту тему?
Евгений
Будет
Когда?
Roman
Никаких гарантий по очередности исполнения файберов/коллбэков нет
Igor
В виде текста это есть? Вообще что гуглить на эту тему?
event loop, на хабре что то читал, но видео годное
Roman
Если что-то модифицировать из разных точек - надо лочить
Rafael 🌵
«Boost.Asio C++ Network Programming». Глава 1: Приступая к работе с Boost.Asio / Хабрахабр https://m.habrahabr.ru/post/192284/
Евгений
Никаких гарантий по очередности исполнения файберов/коллбэков нет
Ты точно знаешь, что они выполняются один за одним. Какая гонка при этом?
Rafael 🌵
Вот тут пункт "синхронное против асинхронного", шикарной написано по этому вопросу
Rafael 🌵
Буст тут причём?
Не буст, а только пункт из этой статьи
Rafael 🌵
Кмк хорошо написано, что либо синхронность либо асинхронность
Евгений
Блдж, с чего ты решил?
Ну event loop ещё никто не отменял. Если, правда, не трогать скролл.
Sergey
Блдж, с чего ты решил?
колбеки выполняются гарантированно последовательно просто порядок не определен
Roman
Ну event loop ещё никто не отменял. Если, правда, не трогать скролл.
Несколько параллельных http-запросов выставляют http-код ответа у какого-нибудь объекта. Где тебе тут очередность?
Sergey
Именно.
блокировки в ноде всё уничтожат
Roman
Смотря что они блокируют и как реализованы
Sergey
Смотря что они блокируют и как реализованы
а не важно если они блокируют поток исполнения, то всё, нода встанет
Sergey
Можно блочить не поток, а файбер
что есть файбер в твоём понимании ноды?
Sergey
Короч. Есть генераторы и промисы в ноде. Файберы не нужны!
Vlad
ни в одном из твоих ишью не предоставили репро кейс
Vlad
Sergey
Пример хорошего UX: теперь Гитхаб наглядно объясняет пользователям, что разрешает или запрещает лицензия проекта — https://goo.gl/ZxhMnL
Sergey
я вот не могу понять
Sergey
Sergey
Sergey
как разница? кроме названий переменных
Andrey
Там дальше написано
Serhii
В последнем идёт создание нового промиса через фабрику?
Sergey
вот в этих двух кусках кода
Sergey
разницы же нет
Serhii
Именно в этих нет
Rafael 🌵
Там дальше написано
а дайте ссылку
Sergey
блин копец можно было также написать result = result.then(() => promise) и не **ть мозги
Andrey
Предполагается, что есть. Первый вариант - промис. Второй - функция, возвращающая промис
Serhii
Ну это уже надо сорц фабрики видите
Serhii
А, госпди, эта статья
Sergey
короч, если я хочу executeSequentially, то преобразовывать руками каждый промис в функцию возвращающую промис это как минимум тупо
Sergey
намного лучше сделать всё прозрачно кинул массив, и функция сама сделает внутри что нужно result = result.then(() => promise)
Sergey
статья отстой
Sergey
шлак предложение
krn
шлак предложение
мне тоже не нравится, как выкручиваетесь в таких случаях? доп переменная ?
Serhii
Зачем
Sergey
выносить в функцию...
Sergey
но стараюсь проектировать так, чтобы такой фигни не было
Serhii
мне тоже не нравится, как выкручиваетесь в таких случаях? доп переменная ?
Выносить then вне инициального промиса - проучится плоский чейн промисов
Serhii
Промисы созданы чтобы не делать ступеньки калбеков , автор в примере все равно их делает
Sergey
шлак предложение
getUserByName('noname') .then(user => getUserByAccountId(user.id)) .then(userAccount => console.log(userAccount))
Serhii
+
Sergey
единственный момент, это если мне нужен результат и getUserByName и getUserByAccountId
andrei
А не)
Serhii
А не)
Удаляй ы)))
Serhii
то бишь функция отдельная
Наверное, не до конца понял. Выше пример от совы
Sergey
единственный момент, это если мне нужен результат и getUserByName и getUserByAccountId
делал типа так, но это отстой: getFirst() .then(first => getSecond(first.id).then(second => [ first, second ])) .then([first, second] => console.log(first, second))
Serhii
Но если нужно кумулировать все выводы со всех промисов тогда да - нужна переменная
Serhii
Если в последнем нужно ответ и первого и второго и тд
Nikolay
Можно и без переменной.
Sergey
как ж
Serhii
Жги
Serhii
Дополнительный зен чтобы модифицировать вывод ы
Nikolay
getFirst().then(first => Promise.all([first, getSecond(first)])).then(([first, second]) => ...)
Nikolay
Тоже коряво, но тем не менее :)
Serhii
Такое
Sergey
почти то, что я предложил, только c All