
Bohdan
18.01.2018
07:32:54
эдакий эгоистичный опенсорс

M
18.01.2018
07:50:46

Sergey
18.01.2018
07:58:51

Bohdan
18.01.2018
08:00:21

Google

Bohdan
18.01.2018
08:00:31
но я чёт таких людей не знаю)

Борис
18.01.2018
08:28:07
это реально удобнее промисов
Серега, это немного другой вопрос. Изначально срач начался из-за "не, я реакт выпилю как только время появится амп возьму. в попу этот a+ промисовый ад" - челик утверждает что реакт говно, потому что callbackhell, при этом сбрасывает свою либу как аргумент .... не может развернуть все в одну цепочку. Вот и получается, советчик от бога: как работает цепочка промисов не разобрался, но вещает что говно
А по поводу удобнее или нет - субьективно, ведь все-равно ты оборачиваешь какими-то дополнительными вызовами. Вот была бы нативная поддержка как async/wait - тут вопросов бы не было вообще )))

Maksim
18.01.2018
08:30:31
Реакт говно) и с этим спорят ток упоротые)


Sergey
18.01.2018
08:30:35
Серега, это немного другой вопрос. Изначально срач начался из-за "не, я реакт выпилю как только время появится амп возьму. в попу этот a+ промисовый ад" - челик утверждает что реакт говно, потому что callbackhell, при этом сбрасывает свою либу как аргумент .... не может развернуть все в одну цепочку. Вот и получается, советчик от бога: как работает цепочка промисов не разобрался, но вещает что говно
А по поводу удобнее или нет - субьективно, ведь все-равно ты оборачиваешь какими-то дополнительными вызовами. Вот была бы нативная поддержка как async/wait - тут вопросов бы не было вообще )))
он то разобрался, просто он драматизирует. Промисы это реально "чуть лучше" чем вложенные колбэки (и твой пример с передачей по ссылке всяких штук и действием на расстлянии это только подтверждает).
> субьективно, ведь все-равно ты оборачиваешь какими-то дополнительными вызовами.
конечно субъективно, все упирается в ментальную модель пользователя. Подавляющее большинство привыкло к синхронному флоу выполнения и обработке ошибок через try/catch. Промисы позволяют тебе выразить пайплайн как цепочку действий. Елды же позволяют эту цепочку действий записать в синхронном стиле. И это пиздец важная штука.
> Вот была бы нативная поддержка как async/wait - тут вопросов бы не было вообще )))
были бы
предположим у нас есть 5 функций в цепочке вызовов
f1, f2, f3, f4, f5, f6
и где-то у нас записано const a = f1(). Вдруг оказалось что f6 надо сделать запрос на сервер - не вопрос, достаточно вроде бы написать просто const a = await f1() но нет... надо явно указать что f1 асинхронная, так же и для f2 и f3 и всех функций в цепочке вызовов.


Борис
18.01.2018
08:33:40

Sergey
18.01.2018
08:34:59
так что yield и обертки это все еще лучше промисов
но чуть хуже async/await на уровне языка
так что.... "в жопу промисы если это возможно"

Google

Maksim
18.01.2018
08:36:12
Боря, у тебя синдром пхпшника) спустись на землю.
А то такое ощущение, что только ты осознаёшь, как промисы работают :)

Sergey
18.01.2018
08:37:20
так что с этой позиции переход на amp где в целом все построено на yield и "обертки" особо не нужны - в целом логичный шаг
мне тоже amp нравится больше чем reactphp

Maksim
18.01.2018
08:37:51

Борис
18.01.2018
08:37:58
так что yield и обертки это все еще лучше промисов
Вот реально не вижу разницы, тебе в обоих случаях с f1,f2 (вообще, что это за пример через запятую.... не понятно немного) нужно оборачивать либо в yieid async()
либо в ->then(function(){
Ну реально одинаково дерьмовые варианты. Тогда просто нужно топить "нахер асинхронность" - тут вот соглашусь

Sergey
18.01.2018
08:38:08

Maksim
18.01.2018
08:38:15

Sergey
18.01.2018
08:39:13

Maksim
18.01.2018
08:39:23
Лучше глянь ссылки что я тебе вчера скидывал в тему про синглтон и event store)

Sergey
18.01.2018
08:39:27
разница, координальная, в том как именно записана цепочка действий
и что ты можешь с этим сделать
с промисами ты... ничего не можешь сделать. ты можешь просто ограничить глубину колбэков до 1-ого уровня. Но 1 уровень колбэков у тебя остается. с yield ты "приостанавливаешь" поток упралвения, так что у нас вообще нет колбэков.
скинь в личку

Борис
18.01.2018
08:44:33

Sergey
18.01.2018
08:45:30

Борис
18.01.2018
08:49:41
Вот давай для примера обернем все эти асинхронные функции внутрь doSmthgAsync(); внутри хочешь елды, хочешь промисы... не важно, внутри сделай echo "Foo" через 5 секунд.
$bla = doSmthngAsy();
echo "Bar";
Скрипт выведет BarFoo и переменная $bla будет промисом (даже с yield в amphp это промисы).

Sergey
18.01.2018
08:50:21
$bla = yield doSomethingAsy();
echo "Bar"

Google

Sergey
18.01.2018
08:50:44
будет BarFoo

Борис
18.01.2018
08:51:02
Нееет вот как ты записал будет FooBar
потому что yield будет ждать

Sergey
18.01.2018
08:51:22
да
чет попутал
ты типа говоришь о точке входа в приложение?)

Борис
18.01.2018
08:52:10
нет, просто о любой синхронной фукнции в асинхронном приложении... Это ведь еще законно? :)

Maksim
18.01.2018
08:52:41
скорее умышленно неправильно готовит елды и пытается выдать это за минус

Sergey
18.01.2018
08:53:06
$ip = yield resolveDns($host);
if (someSyncFunction($ip)) {
throw \Exception();
}
return yield doSomethingUseful($ip);

Борис
18.01.2018
08:55:12
Если ты возьмешь асинхронность(любой вариант) и вызовешь внутри любой другой синхронной функции, то синхронная функция вернет тебе промис. Следовательно, внутри этой синхронной функции что промис вей, что yield way имеют одни и те же проблемы.

Maksim
18.01.2018
08:56:24
какие проблемы есть в приведённом Сергеем примере?
ну кроме того, что он проще записан в разы. Это большая проблема.

Борис
18.01.2018
08:57:57

Sergey
18.01.2018
08:58:43

Борис
18.01.2018
08:58:54
Ок, давай я скину на промисах

Sergey
18.01.2018
08:58:57
не надо на промисах)

Борис
18.01.2018
08:59:07
а ты переведешь в елды

Sergey
18.01.2018
08:59:46
try {
$ip yield resolveDns($host);
} catch(UnableToResolveDNS $error) {
//
}
// продолжаем работу

Google

Sergey
18.01.2018
09:00:08
под продолжаем работу я имею ввиду вызов чего хочешь

M
18.01.2018
09:00:41
Ребят, думаю найдутся здесь кто с хайлоадом работал.
Вопрос: если сделали реплику Master-Slave, то пишем получается всегда в мастер, а читаем с мастера и слейвов? Какой на практике лаг между тем как записали в мастер и данные появились на реплики? Может такое быть, что если записал в мастер и тут же прочитал из реплики, то данные ещё старые останутся?

Борис
18.01.2018
09:00:44
Я тебя прошу это спрятать в другой вызов. И сразу это вызвав отправить на экран echo "Foo"

Sergey
18.01.2018
09:00:47
yield (с оберткой) дожидается выполнения промиса и развораичвает его. Если тот зафэйлился - кинет исключение.
потому что это асинхронная функция

Борис
18.01.2018
09:01:30
Но с промисами ты можешь продолжать работу, и функция тоже асинхронная

Sergey
18.01.2018
09:01:31
yield application()
echo "Bar"
ничего не понимаю

Admin
ERROR: S client not available

Maksim
18.01.2018
09:02:07
этот человек меня промисам учить пытался...

Борис
18.01.2018
09:03:49
yield application(echo Foo)
echo "Bar"
FooBar после вызова yield application у тебя стоит поток выполнения
$this->application()->then(echoFoo);
echo Bar;
//при необходимости echoBar
BarFoo - могу продолжать писать код в then (асинхронные вызовы) могу сразу после функции (синхронный код)

Sergey
18.01.2018
09:04:12

Борис
18.01.2018
09:05:22

Sergey
18.01.2018
09:05:44

Борис
18.01.2018
09:05:46
с промисами у меня больше контроля.

Sergey
18.01.2018
09:05:58
мнимого контроля

Google

Sergey
18.01.2018
09:06:59
я согласен что это лишь сахар для разворачивания промисов, с этим никто не спорил вроде.
но если под копотом те же промисы и мы из просто разворачиваем - о каких таких ограничениях идет речь?

M
18.01.2018
09:07:38

Sergey
18.01.2018
09:07:39
ты что бы "заменить фэйл на сексес" всеравно должен добавить еще один then и преобразовать fail в новый промис
потому если тебе критично ты всегда для таких операций можешь читать из мастера
их обычно не очень много

M
18.01.2018
09:09:01

Sergey
18.01.2018
09:09:21
точнее я бы сказал бесполезно, и вместо этого стоит выстраивать логику так что бы ей пофигу было (ты всегда можешь важные штуки из мастера читать)

Maksim
18.01.2018
09:10:01
слейв не должен использоваться как оперативная база. Вот и всё.
слейв - это слейв. Его задача на подхвате сидеть

M
18.01.2018
09:10:19
А реплика Master-Master плохая идея?

Sergey
18.01.2018
09:10:40
а значит тебе достаточно master-slave
p.s. если тебе вообще реплики нужны

Борис
18.01.2018
09:11:17

Maksim
18.01.2018
09:11:31
ой красавчик
хоспаде, ну тучно синдром пхпшника :)

Sergey
18.01.2018
09:11:51

Maksim
18.01.2018
09:12:10

Sergey
18.01.2018
09:12:40

Maksim
18.01.2018
09:13:11

Sergey
18.01.2018
09:13:25