◆ Promise の then/catch で似たような処理が多い
◆ 変わる部分を部分適用済みにした関数を then の引数にしたい
◆ then の処理で追加の処理が必要になると即時 2 回関数呼び出し形式になるのがイマイチ

Promise の then/catch を書く時 基本は

const foo = (value, data) => {...}
const bar = (err, value) => {...}

asyncSomething().then(
data => {
foo(value1, data)
},
err => {
bar(err, value2)
}
)

みたいな感じで その場に関数を書いて 成功・失敗時の処理を書いています
ただ 処理がパターン化してるなら 毎回こう書くのは面倒です
変わる部分だけを引数で渡して

const foo = value => data => { ... }
const bar = value => err => { ... }

asyncSomething().then(foo(value1), bar(value2))

と書きたくなります
しかし 別の then では成功・失敗時に別の追加の処理をしたいこともあります

const foo = value => data => { ... }
const bar = value => err => { ... }

asyncSomething().then(foo(value1), bar(value2))

asyncSomething2().then(
data => {
foo(value3)(data)
// additonal something
},
err => {
bar(value4)(err)
// additonal something
}
)

そうなるとその場で関数を書く形式にせざるを得ないです
さらに foo や bar の呼び出しが 「foo(a)(b)」 形式になります
その場で即 2 回呼び出すのなら「foo(a, b)」にしたくなります
かと言ってそのために引数の数を判定して足りないなら部分適用済みの関数を返すとかやりたいわけでもないです
こういう関数の受け渡しがメインなことをするとやっぱり関数型言語にある 関数はすべて自動でカリー化されていて呼び出しにカッコがいらない というのの方が扱いやすそうに見えてきます

元の形式で引数の順を then に書くように揃えた上で bind もできますが bind だと 「.bind(null,」 が毎回入るのであんまりスッキリしないんですよね