javascript - 从复合函数中的上一个函数访问 Arg(使用 Ramda.pipe)

标签 javascript functional-programming ramda.js

我有一个案例,我有一个可以很好地组合在一起的管道,但在一个实例中,我需要触发对我无法控制的 API 的异步调用。我不一定关心结果,只关心它是否成功,然后想继续将 arg 传递给该调用(而不是返回值)。所以我的管道看起来像这样:

const extractUserIdFromResponse = R.andThen( R.prop( user_id ) );
const callExternalApi = tryCatch(
   doApiCall, 
   handleAPIFailure
); 

const pipeline  = R.pipe(
   getRecordFromDatabase, 
   extractUserIdFromResponse, 
   callExternalApi, 
   doSomethingElseWithUserId 
); 

基本上,我希望 doSomethingElseWithUserId 函数显然接受 userId 作为参数,而不是从 callExternalApi 返回的结果。我对此有点陌生,所以我不确定我是否走在正确的轨道上。

预先感谢您的帮助!

最佳答案

我也是 ramda 的新手,这就是为什么我不确定答案的准确性,但是doSomethingElseWithUserId可以收到user_id来自getRecordFromDatabase通过callExternalApi .

<强> https://codesandbox.io/s/affectionate-oskar-kzn8d

import R from "ramda";

const getRecordFromDatabase = () => (
  new Promise((resolve, reject) => {
    return resolve({ user_id: 42 });
  })
);

// I assume that you need to pass the arg here in handleAPIFailure as well
const handleAPIFailure = () => {};
const doApiCall = args => (
  new Promise((resolve, reject) => {
    return resolve(args);
  })
);

const extractUserIdFromResponse = R.andThen(R.prop("user_id"));
const callExternalApi = R.tryCatch(doApiCall, handleAPIFailure);

const doSomethingElseWithUserId = user_id => {
  console.log(user_id); // 42
};

const pipeline = R.pipe(
  getRecordFromDatabase,
  extractUserIdFromResponse,
  callExternalApi,
  R.andThen(doSomethingElseWithUserId)
);

pipeline();

关于javascript - 从复合函数中的上一个函数访问 Arg(使用 Ramda.pipe),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60344745/

相关文章:

javascript - 为什么将javascript文件包含在函数中?

javascript - 将 JSON 字符串从 jsp 传递到 js 文件

javascript - 为什么我的过滤功能不起作用? (JavaScript)。

scala - 函数式编程 - 非常强调递归,为什么?

javascript - 无法将 parseInt 用作 ramdajs 的 ifElse 的 onTrue 或 onFalse 函数

javascript - 如何将子项添加到 TreePanel 中的节点?

javascript - 如何测试使用来自已分派(dispatch)操作的数据的 Saga

language-agnostic - 序列化持久/功能数据结构

javascript - Ramda 忽略键和值(如果它们都匹配)

javascript - Ramda.js 组合两个共享相同属性 ID 的对象数组