Железнодорожно-ориентированное программирование с Fluture - PullRequest
1 голос
/ 08 ноября 2019

Железнодорожно-ориентированное программирование (ROP) объясняется здесь:

https://fsharpforfunandprofit.com/rop/

Есть ли способ использовать этот шаблон с Fluture

Я могу сделать ROPс помощью этих двух вспомогательных методов, таких как:

const bind = f => x => Future.attempt(() => f(x));
const bindAsync = f => x => Future.tryP(() => f(x));

Future.of("TEST")
    .chain(bind(doThis))
    .chain(bind(doThat))
    .chain(bindAsync(doThisAsync))
    .chain(bindAsync(doThatAsync))
    .chain(bind(doAnotherThing))
    .chain(bindAsync(doAnotherThingAsync))
    .
    .
    .

Есть ли лучший способ удалить bind, bindAsync и сделать привязку автоматически?

1 Ответ

0 голосов
/ 08 ноября 2019

Я бы не рекомендовал структурировать вашу программу следующим образом. Похоже, что у вас есть функции, которые генерируют исключения и используют обещания (от которых вы хотите избавиться с помощью ROP), распределенные по всей вашей программе, а затем составьте их на верхнем уровне.

Вместо этогоВы должны обернуть библиотеки, которые вы используете, чтобы избавиться от обещаний / исключений и преобразовать их в будущее как можно ближе к библиотеке проблем. Например, если вы используете обещания для сетевых вызовов HTTP, оберните сетевую библиотеку так, чтобы она возвращала фьючерсы.

Это означает, что вы можете затем изменить свои функции композиции на работу с чистыми функциями и функциями, возвращающими будущее, чтоможет быть составлен напрямую, используя map и chain.

...