pResolveValues

pResolveValues

  • async (collection: Collection) => ResolvedCollection
  1. Resolve the values of a collection.

    This is basically a generic Promise.all

    const a = Promise.resolve('a')
    const b = Promise.resolve('b')
    
    await pResolveValues({ a, b })
    // is { a: 'a', b: 'b' }
    
    await pResolveValues([a, b])
    // is ['a', 'b']
    const a = Promise.resolve('a')
    const b = Promise.resolve('b')
    
    await pResolveValues({ a, b })
    // is { a: 'a', b: 'b' }
    
    await pResolveValues([a, b])
    // is ['a', 'b']
    
    const a = Promise.resolve('a')
    const b = Promise.resolve('b')
    
    await pResolveValues({ a, b })
    // is { a: 'a', b: 'b' }
    
    await pResolveValues([a, b])
    // is ['a', 'b']
    const a = Promise.resolve('a')
    const b = Promise.resolve('b')
    
    await pResolveValues({ a, b })
    // is { a: 'a', b: 'b' }
    
    await pResolveValues([a, b])
    // is ['a', 'b']
    
  2. Sometimes we want to resolve the values of a collection. Below, we are coding a checkout process for our online store. To prep the order, we need to call the API to get the sales tax and shipping amount. Let's resolve our updated order with those properties assigned.

    const mockSalesTax = 0.08
    const mockShipping = 10
    
    const mockStoreApi = {
      getSalesTax: async _order => mockSalesTax,
      getShipping: async _order => mockShipping,
    }
    
    const prepOrder = async order =>
      pResolveValues({
        ...order,
        salesTax: mockStoreApi.getSalesTax(order),
        shipping: mockStoreApi.getShipping(order),
      })
    
    const userLocation = 'cleveland'
    const shoppingCart = ['broom', 'mop', 'detergent']
    const order = {
      cart: shoppingCart,
      destination: userLocation,
    }
    const updatedOrder = await prepOrder(order)
    
    console.log(updatedOrder)
    // prints
    // {
    //   cart: [broom, mop, detergent]
    //   destination: cleveland
    //   shipping: 10
    //   salesTax: 0.08
    // }
    type Order = {
      cart: string[]
      destination: string
      salesTax: number
      shipping: number
    }
    
    const mockSalesTax = 0.08
    const mockShipping = 10
    
    const mockStoreApi = {
      getSalesTax: async (_order: Order) => mockSalesTax,
      getShipping: async (_order: Order) => mockShipping,
    }
    
    const prepOrder = async (order: Order) =>
      pResolveValues({
        ...order,
        salesTax: mockStoreApi.getSalesTax(order),
        shipping: mockStoreApi.getShipping(order),
      })
    
    const userLocation = 'cleveland'
    const shoppingCart = ['broom', 'mop', 'detergent']
    const order = {
      cart: shoppingCart,
      destination: userLocation,
    } as Order
    const updatedOrder = await prepOrder(order)
    
    console.log(updatedOrder)
    // prints
    // {
    //   cart: [broom, mop, detergent]
    //   destination: cleveland
    //   shipping: 10
    //   salesTax: 0.08
    // }
    
    const mockSalesTax = 0.08
    const mockShipping = 10
    
    const mockStoreApi = {
      getSalesTax: async _order => mockSalesTax,
      getShipping: async _order => mockShipping,
    }
    
    const prepOrder = async order =>
      pResolveValues({
        ...order,
        salesTax: mockStoreApi.getSalesTax(order),
        shipping: mockStoreApi.getShipping(order),
      })
    
    const userLocation = 'cleveland'
    const shoppingCart = ['broom', 'mop', 'detergent']
    const order = {
      cart: shoppingCart,
      destination: userLocation,
    }
    const updatedOrder = await prepOrder(order)
    
    console.log(updatedOrder)
    // prints
    // {
    //   cart: [broom, mop, detergent]
    //   destination: cleveland
    //   shipping: 10
    //   salesTax: 0.08
    // }
    type Order = {
      cart: string[]
      destination: string
      salesTax: number
      shipping: number
    }
    
    const mockSalesTax = 0.08
    const mockShipping = 10
    
    const mockStoreApi = {
      getSalesTax: async (_order: Order) =>
        mockSalesTax,
      getShipping: async (_order: Order) =>
        mockShipping,
    }
    
    const prepOrder = async (order: Order) =>
      pResolveValues({
        ...order,
        salesTax: mockStoreApi.getSalesTax(order),
        shipping: mockStoreApi.getShipping(order),
      })
    
    const userLocation = 'cleveland'
    const shoppingCart = ['broom', 'mop', 'detergent']
    const order = {
      cart: shoppingCart,
      destination: userLocation,
    } as Order
    const updatedOrder = await prepOrder(order)
    
    console.log(updatedOrder)
    // prints
    // {
    //   cart: [broom, mop, detergent]
    //   destination: cleveland
    //   shipping: 10
    //   salesTax: 0.08
    // }