typescript - Hur man pipar Promise.allSettled för lodash/fp pipe? (Eller något funktionellt liknande pipe-bibliotek, t.ex.: p-pipe)
Skulle vilja:
skriva en hel kedja av funktionsanrop som pipe (pipe-funktionen kan vara från Lodash eller andra bibliotek)
Mitt fungerande men ofullständiga försök:
Detta fungerar, jag är halvt nöjd med detta men inte 100 % det jag vill ha:
import {filter, map, pipe} from 'lodash/fp';
const anAwesomeFunction = async stuff => {
const data = await fetchData(stuff);
return {
title: 'example',
data
};
};
const pipingRocks = await pipe(
filter({status: 'fulfilled'}),
map(
(promiseLikeObj: PromiseFulfilledResult) => promiseLikeObj.value
)
)(await Promise.allSettled(map(anAwesomeFunction, result)));
Vad jag skulle vilja ha:
Så vitt jag läst får pipe från lodash inte asynkrona funktioner: lodash fp-dokumentation
import {filter, map, pipe} from 'lodash/fp';
const anAwesomeFunction = async stuff => {
const data = await fetchData(stuff);
return {
title: 'example',
data
};
};
const pipingRocks = await pipe(
map(anAwesomeFunction),
Promise.allSettled, // here lies my doubt on how to bind it
filter({status: 'fulfilled'}),
map(
(promiseLikeObj: PromiseFulfilledResult) => promiseLikeObj.value
)
)(result);
Jag har också försökt med: import pPipe från 'p-pipe';
Svar #1
Så, strax efter att ha lagt upp den här frågan gav jag ett sista försök och fick det att fungera med p-pipe (inte med lodash-varianten), genom att binda Promise.allsettled som en Promise, precis som:
import {filter, map} from 'lodash/fp';
import pPipe from 'p-pipe';
const anAwesomeFunction = async stuff => {
const data = await fetchData(stuff);
return {
title: 'example',
data
};
};
const pipingRocks = await pPipe(
map(anAwesomeFunction),
Promise.allSettled.bind(Promise),
filter({status: 'fulfilled'}),
map(
(promiseLikeObj: PromiseFulfilledResult) => promiseLikeObj.value
)
)(result);
Jag är öppen för bättre förslag.
