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.