Святилище JS выполнить 2 шага трубы с условием - PullRequest
1 голос
/ 04 ноября 2019

У меня есть 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, которые должны выполняться только для файлов изображений.

Я знаю, что могу вернуть Left из checkIfIsImage, если файл не является изображением, но при этом copyFileToPath и formatResponse также игнорируются.

Я хочу игнорировать только addWatermarkToImage иcopyImageToPublicPath если файл не является изображением

Как я могу это сделать?

1 Ответ

1 голос
/ 04 ноября 2019

Общий подход заключается в использовании такой функции, как 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),
])

Обратите внимание, что необходимо вернуть S.Right (file) вместо file в случае без изображения.

...