Skip to content Skip to sidebar Skip to footer

How Do I Loop Through An Array Item Of Json And Make Async Api Requests With Certain Json Objects

I apologize if my question seems kind of newbie, I'm very new to async programming and I'm still trying to figure everything out. I'm also trying to figure out how to ask good ques

Solution 1:

Your main issue is that .forEach(async is very rarely, if at all, going to work like you expect

However, the other issue is

const price = await stripe.prices.retrieve(item.price_id)
.then(function(message) {
    console.log(message.unit_amount);
    //log the unit_amount value from price object
  },
  function(error) {
    console.log("Reject:", error);
  }
);

This will result in price being undefined - since the .then doesn't return anything

It's always (usually) not a good idea to mix .then/.catch with async/await

So - fixing those two issues - your code becomes

const stripe = require('stripe')('sk_test_51Hemg7ETi3TpMq6bUmiw1HoxERPmReLOT3YLthf11MEVh4xCmnsmxtFHZRlWpimoSnwHjmUOKNkOFsbr9lEEIybe00SQF71RtF');
//This is a test secret key for a dummy stripe account, don't worry I'm not sharing anything sensitiveconst express = require('express');
const app = express();
app.use(express.static('.'));
constYOUR_DOMAIN = 'http://localhost:4242';

app.post('/create-session', async(req, res) => {
    //Body of the POST requestconst cartContents = [{
            product_id: 'prod_IHb8dX3ESy2kwk',
            quantity: '2',
            price_id: 'price_1Hh1wcETi3TpMq6bSjVCf3EI'
        }, {
            product_id: 'prod_IFIIyTO0fHCfGx',
            quantity: '2',
            price_id: 'price_1HeniJETi3TpMq6bPDWb3lrp'
        }
    ];

    //Array to push parsed data onto for line_items object in stripe sessionconst lineItems = [];
    try {
        for (let item of cartContents) {
            //Retrieve price object from stripe API:const price = await stripe.prices.retrieve(item.price_id);
            console.log(price.unit_amount);
            //log the unit_amount value from price object//retrieve product object from stripe APIconst product = await stripe.products.retrieve(item.product_id);
            console.log(product.name);
            // retrieve "name" and "images" from returned product object and assign to variableconst productName = product.name;
            const productImage = product.images;
            //retrieve "unit_amount" from returned price object and assign to variableconst productPrice = price.unit_amount;
            //retrieve item quantity from cartContents object and assign to variableconst productQuantity = item.quantity;
            //Add variables to item and push to lineItems array
            lineItems.push({
                price_data: {
                    currency: 'usd',
                    product_data: {
                        name: productName,
                        images: [productImage],
                    },
                    unit_amount: productPrice,
                },
                quantity: productQuantity,
            });
        }
        const session = await stripe.checkout.sessions.create({
            payment_method_types: ['card'],
            line_items: lineItems,
            mode: 'payment',
            success_url: `http://localhost:5001/success.html`,
            cancel_url: `http://localhost:5001/cancel.html`,
        });
        res.json({id: session.id});
    } catch(e) {
        // handle error here
    }
});

Post a Comment for "How Do I Loop Through An Array Item Of Json And Make Async Api Requests With Certain Json Objects"