Sanctuary js 执行 pipe with condition 的 2 步
Sanctuary js execute 2 steps of pipe with condition
我有一个 S.pipe
用于上传和操作传入的请求文件
S.pipe([
getRequestFile,
S.chain(saveTemporary),
S.chain(checkIfIsImage),
S.chain(addWatermarkToImage), // only execute on image
S.chain(copyImageToPublicPath), // only execute on image
S.chain(copyFileToPath),
S.chain(formatResponse),
]);
有 2 个特定步骤 addWatermarkToImage
和 copyImageToPublicPath
应该只对图像文件执行。
我知道我可以从 checkIfIsImage
return Left
如果文件不是图像,但这样做 copyFileToPath
和 formatResponse
也会被忽略.
如果文件不是图像,我只想忽略 addWatermarkToImage
和 copyImageToPublicPath
我该怎么做?
一般的做法是使用x => p (x) ? f (x) : g (x)
这样的函数。 g
可以是一个微不足道的函数,例如 S.I
或 S.Right
.
在您的情况下,代码将类似于以下内容:
S.pipe ([
getRequestFile,
S.chain (saveTemporary),
S.chain (file => file.type === 'image' ?
S.chain (copyImageToPublicPath)
(addWatermarkToImage (file)) :
S.Right (file)),
S.chain (copyFileToPath),
S.chain (formatResponse),
])
请注意,在非图像情况下,有必要 return S.Right (file)
而不是 file
。
我有一个 S.pipe
用于上传和操作传入的请求文件
S.pipe([
getRequestFile,
S.chain(saveTemporary),
S.chain(checkIfIsImage),
S.chain(addWatermarkToImage), // only execute on image
S.chain(copyImageToPublicPath), // only execute on image
S.chain(copyFileToPath),
S.chain(formatResponse),
]);
有 2 个特定步骤 addWatermarkToImage
和 copyImageToPublicPath
应该只对图像文件执行。
我知道我可以从 checkIfIsImage
return Left
如果文件不是图像,但这样做 copyFileToPath
和 formatResponse
也会被忽略.
如果文件不是图像,我只想忽略 addWatermarkToImage
和 copyImageToPublicPath
我该怎么做?
一般的做法是使用x => p (x) ? f (x) : g (x)
这样的函数。 g
可以是一个微不足道的函数,例如 S.I
或 S.Right
.
在您的情况下,代码将类似于以下内容:
S.pipe ([
getRequestFile,
S.chain (saveTemporary),
S.chain (file => file.type === 'image' ?
S.chain (copyImageToPublicPath)
(addWatermarkToImage (file)) :
S.Right (file)),
S.chain (copyFileToPath),
S.chain (formatResponse),
])
请注意,在非图像情况下,有必要 return S.Right (file)
而不是 file
。