0

I have the below code:

  const incompleteKYCClaims = await Promise.all(
    kycPendingProviders.map(async (p) => {
      const provider = await getProviderOrThrow(p.tin)

      const isPreviouslyApproved = provider.stripeAccount != undefined    
      if (isPreviouslyApproved) {
        return
      }
    
      return toProviderRelationshipClaims({ tin: p.tin, role: ProviderUserSubRoles.ky, status: 'KYCInDraft' })
    })
  )
  const incompleteKYCClaimsFiltered = incompleteKYCClaims.filter(
    (claim) => claim
  ) as Array<ProviderRelationshipClaims>

It is working correctly. However, I would like to combine the map and filter passes into a single reduce pass. For that, wrote the below:

  const incompleteKYCClaims = kycPendingProviders.reduce<Array<ProviderRelationshipClaims>>( async (filtered, p) => {
    const provider = await getProviderOrThrow(p.tin)

    const isPreviouslyApproved = previouslyApproved.includes(provider.status)

    if (!isPreviouslyApproved) {
      filtered.push(toProviderRelationshipClaims({tin: p.tin, role: ProviderUserSubRoles.ky, status: 'KYCInDraft'}))
    }
    return filtered
  }, Promise.resolve([]) as Array<ProviderRelationshipClaims>

The reduce version is not working. The error is: Argument of type '(filtered: ProviderRelationshipClaims[], p: ProviderRelationship) => Promise<ProviderRelationshipClaims[]>' is not assignable to parameter of type '(previousValue: ProviderRelationshipClaims[], currentValue: ProviderRelationship, currentIndex: number, array: ProviderRelationship[]) => ProviderRelationshipClaims[]'.

How could I rewrite the reduce version so there are no problems?

Igor Shmukler
  • 1,742
  • 3
  • 15
  • 48
  • 1
    Don't [use `reduce` with `async` functions](https://stackoverflow.com/questions/41243468/javascript-array-reduce-with-async-await/41243567#41243567). You just don't want that. – Bergi Jul 17 '23 at 21:56
  • 1
    "*I would like to combine the map and filter passes into a single reduce pass*" - that's not really possible. You forgot about the `Promise.all` in between. – Bergi Jul 17 '23 at 21:57

0 Answers0