Promise.allSettled()
雖然好用,唯其以 Static Method 設計,且也不適合 Function Pipeline,Wink-fp 提供 Function 化的 allSettled()
。
Version
macOS Catalina 10.15.4
WebStorm 2019.3.4
Node 12.4.0
ECMAScript 2020
Ramda 0.27.0
Wink-fp 1.20.67
ECMAScript
let data = [
Promise.resolve(1),
Promise.reject(2),
Promise.resolve(3)
]
let f = a => Promise.allSettled(a)
.then(x => x.filter(x => x.status === 'fulfilled'))
.then(x => x.map(x => x.value))
.then(console.log)
.catch(console.log)
f(data)
Promise.all()
為 method chaining,且 filter()
與 map()
都必須在 then()
內。
Wink-fp
import { filter, map, propEq, prop } from 'ramda'
import { pipeP, allSettled, log, resolve, reject } from 'wink-fp'
let data = [
resolve(1),
reject(2),
resolve(3)
]
let f = pipeP(
allSettled,
filter(propEq('status', 'fulfilled')),
map(prop('value')),
log
)
f(data)
若使用 Wink-fp 的 allSettled()
則可使用 pipeP()
同時組合 allSettled()
、 filter()
與 map()
,且 filter()
與 map()
都不必躲在 then()
內。
Conclusion
Promise.allSettled()
定義在 ECMAScript 2020,為較新的 function,目前在 Quokka 還無法使用,但在 Node + Babel 與 Vue + Babel 可正常運作- 透過 Wink-fp 的
allSettled()
,則Promise.allSettled()
也能整合於pipeP()
中