Vladimir
async-to-generator
Vladimir
bluebird couroutine хз какое отношение к спеке имеет
Vladimir
вот и вся теория: https://tc39.github.io/ecmascript-asyncawait/
Nikita
никакого. Но оно делает ровно то, чего ты ожидаешь от async/await и возвращает свой промис, который и быстрее и богаче стандартных
Vladimir
и не соответствует спеке)
Vladimir
скользкая дорожка
Nikita
в чем не соответствует?
Vladimir
ну сами промисы не соответствуют - это факт
Nikita
чем конкретно?
Nikita
тесты Promise/A+ проходят?
Vladimir
сходу не воспроизведу, edge кейс связанный с чейнингом
Vladimir
блюберд может запускать колбэки в неправильном порядке в определенных кейсах
Anonymous
ок, спасибо. пытаюсь просто понять как babel и ему подобные компилируют подобные вещи в es5
Nikita
кароче, в ноде ваще никаких проблем от использования bluebird. Только плюсы.
Vladimir
если ты не планируешь переходить на нативный async await никогда, то можно что хочешь делать
Nikita
я бы посмотрел на кейсы. Вообще не знаю, где в спеке последовательное выполнение промисов может быть.
Vladimir
ну promise.then(fn1); promise.then(fn2)
Nikita
global.Promise = require('bluebird') и нативные async/await
Vladimir
fn1 -> fn2
Vladimir
я про async await
Vladimir
async await все равно будет нативный промис давать
Nikita
const promise = Promise.resolve(123); promise.then(console.log.bind(console, 1)); promise.then(console.log.bind(console, 2));
Nikita
ты про такой код?
hamper 𓅝
самое эффективное под ноду - самое простое. Гугли bluebird.coroutine. yield на await меняешь, вот так оно и выглядит
я для корутин обычно co пользуюсь, нафиг этот блюбед жирноват он как то ))
Vladimir
ну да
Nikita
я для корутин обычно co пользуюсь, нафиг этот блюбед жирноват он как то ))
я прям тут не раз уже про это спорил) смотри на бенчмарки
hamper 𓅝
global.Promise = require('bluebird') и нативные async/await
а чем нативные промисы плохи?
Nikita
ну да
и спека говорит что сначала 1, а потом 2 должен выполниться?
Nikita
а чем нативные промисы плохи?
тормознутые, нет методов для коллекций и прочих плюшек
Vladimir
думаю да)
hamper 𓅝
тормознутые, нет методов для коллекций и прочих плюшек
хм... вроде ж в 6 ноде что то там со скоростью промисов правили... надо бы побенчмаркать как нибудь
Nikita
я запускал) BB впереди планеты всей)
Evgeny
блюберд может запускать колбэки в неправильном порядке в определенных кейсах
он это делает осознанно для того, например, чтобы можно было делать рекурсию на промисах
Vladimir
но это противоречи спеке
Evgeny
увы
Vladimir
мысль в том, что bluebird это просто либа, которая не ставит цель соответствовать спеке
Nikita
даже если это все так, я не понимаю в каких случаях это может быть проблемой) Ты от промисов не ждешь синхронного выполнения.
Anonymous
а чем нативные промисы плохи?
медленнее, чем блюбирд
Vladimir
сколько таких мелочей - кто знает
Evgeny
и неудобны
Nikita
а в том же блюберде есть методы для последовательного резолвинга там, где это нужно
hamper 𓅝
медленнее, чем блюбирд
хм... я на нативных всегда писал с их появления... надо будет пощупать блюбердные
Vladimir
в общем с таким же успехом можно использовать и не промисы вообще
Evgeny
ну да, коллбеки например - технология проверенная временем
Nikita
// bluebird User.fetchAll().map((user) => { console.log(user); }); // native User.fetchAll().then((users) => { return users.map((user) => { console.log(user); }); }) // bluebird User.fetchAll().map((user) => { console.log(user); }, { concurrency: 1 }); // native // сосницкий
Nikita
вот пример)
hamper 𓅝
с колбеками код выглядит страшно когда надо штук 40 последовательно выполнить ))
Vladimir
с async await это не нужно
Vladimir
без async await можно взять либу с функциями, работающими с любыми соответствующими стандарту промисами
Nikita
async/await не избавляют тебя от необходимости выполнять несколько промисов асинхронно, а не последовательно
Nikita
то есть Promise.props, Promse.map, etc.
Vladimir
для этого есть Promise.all
hamper 𓅝
для этого есть Promise.all
опередил )) только начал писать
Nikita
у меня нет слов))
Nikita
ты можешь поверх Promise.all написать Promise.props. Но для Promise.map прямо помучаться прийдется)
hamper 𓅝
то есть Promise.props, Promse.map, etc.
да ну нафиг такое, лучше уж нативный синтаксис плюс async/await или какой нибудь co вместо них...
Nikita
да ну нафиг такое, лучше уж нативный синтаксис плюс async/await или какой нибудь co вместо них...
еще раз. async/await не избавляют тебя от необходимости работы с коллекциями
Vladimir
да ладно, getPromise().then(arr => Promise.all(arr.map(fn)))
hamper 𓅝
еще раз. async/await не избавляют тебя от необходимости работы с коллекциями
для набора промисов мне всегда Promise.all хватало или ты о чем?
Vladimir
для работы с коллекциями есть for of, forEach, etc
Vladimir
ну для этого есть хэлпер
Nikita
мы тут, или в реакт чатике, поднимали этот вопрос. Нет lodash для промисов. Будет - поговорим
Nikita
для браузера прям очень неплохо было бы такой либы
Vladimir
вообще-то можно и самому написать код, если он нужен
hamper 𓅝
а я перестал lodash примерно год назад пользоваться, все что мне в нем было нужно уже нативно есть
Nikita
для работы с коллекциями есть for of, forEach, etc
и тебе результат filter хочется дальше в коллекцию промисов смапить. Прыгать вокруг них с Promise.all прям вообще не удобно
hamper 𓅝
или можно написать коротким кусочком кода
Nikita
или взять блюберд?))
Vladimir
только он не соответствует стандарту. для меня это важно
Nikita
и потом тестами покрывать это все. А сроки - да кому они нужны?)
Vladimir
и vendor lock-in
Vladimir
так можно взять либу которая расширяет Array
hamper 𓅝
ну покрыть тестами код из 5 строчек не долго...
Nikita
эм, это абсурд немного)
Nikita
стек свой опишешь вкратце?
Vladimir
но чет никто не делает так
Vladimir
всмысле - стек?
Nikita
я тебе 25 venor-lockов перечислю