Provides pipeAsync
and traversePromises
functions that play well with the rest of Ramda ecosystem. Now also plays "okish" with TypeScript.
npm install ramda-async
import { pipeAsync, traversePromises } from 'ramda-async';
import { reduce, map, prop } from 'ramda';
pipeAsync(
// string[] -> Promise<Response>[]
map(fetch),
// Promise<Response>[] -> Promise<Response[]>
traversePromises,
// Promise<Response[]> -> Promise<object>[]
map(r => r.json()),
// Promise<object>[] -> Promise<object[]>
traversePromises,
// Promise<object[]> -> Promise<number[]>
map(prop('total_count')),
// Promise<number[]> -> Promise<number>
reduce((r, c) => r + c , 0),
)([
"https://api.github.com/search/repositories?q=ramda",
"https://api.github.com/search/repositories?q=react",
])
// Prints total number of repositories found by two queries above
.then(console.log);
You can run the example here
Performs left-to-right function composition of all the steps, automatically lifts the initial value to a promise and pipes it through the composed steps.
Wraps the array of promises with Promise.all
, so it traverses the types like this:
declare function traverse<A>(arrayOfPromises: Promise<A>[]): Promise<A[]>
This package is sponsored by ScreenManager - digital signage platform.