javascript - Ramda Pipe 抛出 TypeError: Cannot read property of 'length' undefined
问题描述
我有一个 curried 函数,我的函数pipe
会延迟其执行,直到传入参数。
以下实现抛出TypeError: Cannot read property of 'length' of undefined
:
export const stageGenerator =
pipe(
createStage,
buildStage,
);
//////// import stageGenerator in different file ///////////
const stageMapper = flowType => {
if (stage) return stageGenerator
const result = stageMapper('asdf')
但以下实施有效
export const stageGenerator = () =>
pipe(
createStage,
buildStage,
);
//////// import stageGenerator in different file ///////////
const stageMapper = flowType => {
if (stage) return stageGenerator()
const result = stageMapper('asdf')
最重要的是,像这样手动管道函数是有效的:
const stageGenerator = (params) => buildStage(createStage(params))
在这两种情况下,我都将相同的参数传递给stageMapper
. 当我 console.log 调用 stageMapper 的类型时,它会说function
.
但是,当我将管道功能更改为:
export const stageGenerator =
pipe(
tap(x => console.log(x)),
createStage,
buildStage,
);
TypeError: Cannot read property 'call' of undefined
调用时会抛出stageMapper
。
为什么我会收到这些错误?是 JavaScript 的错误函数调用,还是管道的错误实现?
解决方案
() => pipe(createStage, buildStage);
是一个由单个操作组成的函数,使用指定的参数调用管道并返回结果。所以,stageGenerator
是一个函数。没有() =>
stageGenerator
将是一个值,即由管道返回的值。在这里阅读更多:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
推荐阅读
- loops - Puppet 3.8.# inline_template 无法拾取 hieradata
- c++ - 正在运行的 Docker 容器中不允许操作 chmod 0777
- javascript - 如何在 Axios 实例中制作动态 baseURL
- php - 为关联数组中的器官赋予价值 - php
- javascript - 在块上挂起事件时,如何更改所需的元素
- python - Django Rest Framework 只读字段问题
- php - woocommerce自定义切换循环
- lotus-notes - LotusScript:通过 POST 方法 HTTP 发送数据
- autodesk-forge - 运行 hide() 函数时没有隐藏任何内容
- c++ - cc1plus.exe - 未找到入口点