javascript - 函数式 javascript 读取、异步、写入结果

标签 javascript functional-programming monads

我现在正在阅读大部分关于 fp 的充分指南。但我无法弄清楚如何正确组合这些函数。

const R = require('ramda');
const {IO, Future} = require('ramda-fantasy');

const read = () => IO(() => 'hello');
const write = (data) => IO(() => {
    console.log(data)
    return data;
});

const process = (data) => Future((reject, resolve) => {
  return setTimeout(() => resolve(data), 0);
});

组合函数的最佳方式是什么:读取 -> 处理 -> 写入?

最佳答案

将 ios 更改为 futures。

const R = require('ramda');
const {Future} = require('ramda-fantasy');

const read = () => Future((reject, resolve) => resolve('hello'));

const write = (data) => Future((reject, resolve) => {
    console.log(data)
    resolve(data);
});

const process = (data) => Future((reject, resolve) => {
    return setTimeout(() => resolve(data), 0);
});

read.chain(process)
    .chain(write)
    .fork(console.warn, console.log);

Futures 就像 async ios,所以这两种类型之间的提升没有太大意义。如果你真的想以不同的方式对待它们,你可以将 monad 嵌套到 IO> 中,正如 bergi 所建议的那样。

关于javascript - 函数式 javascript 读取、异步、写入结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218372/

相关文章:

javascript - 如何获得动态创建的 ID?

javascript - Jquery .each() 不添加总和

functional-programming - Rust 是否/将支持函数式编程习惯用法?

haskell - 将单子(monad)绑定(bind)到复合 Material 中(Haskell)

swift - 为什么 Swift 允许双重可选?

javascript - 谷歌分析 : prevent sending page title

javascript - 有没有办法使用highstock最新版本绘制饼图?

scala - 建议一种更清洁的功能方式

functional-programming - 何时使用函数式编程语言?

python - 为什么 Python 的 any/all 不返回找到的对象?