簡體   English   中英

在 NodeJS 中,如何等待條帶 API 等待返回價格 object,然后再將值分配給 object 變量並推送到數組?

[英]In NodeJS how do I wait for stripe API await to return price object before assigning value to object variable and pushing to array?

嗨 stackoverflow 社區,

我正在嘗試使用 for 循環從條帶 API 中為userItems數組中的每個項目檢索價格 ID

[
    {
      quantity: '1',
      stripe_id: 'prod_IlBmZ4z2QNWeDb',
      stripe_price_id: 'price_1I9fOWLY0lC869vlVNfnYqT3',
      printful_id: '211335091',
      external_id: '6000dcdfa3b443'
    }
  ]

但是我被困在時間死區,導致我檢索到“ReferenceError:在初始化之前無法訪問'price'”錯誤

我相信它是因為item是在條紋 API 以 object 的price返回之前聲明的

在將price.unit_amount分配給 object 變量並將其推送到lineItems數組之前,如何等待條帶返回item

我一直在擺弄 promise 語法試圖解決這個問題,但我在掌握 promises/async/await 時遇到了麻煩(尤其是在條帶 API 的上下文中,文檔並沒有真正觸及這種細微差別)所以我很困惑

這是我當前的代碼

router.post('/create-session', async (req, res) => {
    if (Array.isArray(req.body) == false) {
        var userItems = [req.body];
    } else {
        var userItems = req.body;
    }
    console.log(userItems)
    const lineItems = [];
    const metaData = []
    var i;
    try {
        for (i = 0; i < userItems.length; i++) {
            const price = await stripe.prices.retrieve(
                userItems[i].stripe - price - id
            );
            var item = {
                quantity: userItems[i].quantity,
                price_data: {
                    currency: 'usd',
                    product: userItems[i].stripe_id,
                    unit_amount: price.unit_amount
                }
            }

            //   var itemMetaData = {
            //       variant_id: userItems[i].printful-id,
            //      external_id: userItems[i].external-id
            //  } */
            //lineItems.push(item)
            // metaData.push(itemMetaData)

        }
        //create checkout session
        const session = await stripe.checkout.sessions.create({
            billing_address_collection: 'auto',
            shipping_address_collection: {
                allowed_countries: ['US'],
            },
            payment_method_types: ['card'],
            line_items: lineItems,
            //   metadata: metaData,
            mode: 'payment',
            success_url: `http://localhost:5000/success.html`,
            cancel_url: `http://localhost:5000/cancel.html`,
        });
        res.json({
            //return session ID
            id: session.id
        });
    } catch (err) {
        console.log(err)
    }
});

謝謝!

在變量初始化之前,您似乎在表達式中使用了價格變量。 您的意思是使用userItems[i].price嗎?

try {
    var i;
    for (i = 0; i < userItems.length; i++) {
        const price = await stripe.prices.retrieve(
            userItems[i].stripe - userItems[i].price - userItems[i].id
        );
        var item = {
            quantity: userItems[i].quantity,
            price_data: {
                currency: 'usd',
                product: userItems[i].stripe_id,
                unit_amount: price.unit_amount
            }
        }
        lineItems.push(item)
    }
    //create checkout session
    const session = await stripe.checkout.sessions.create({
        billing_address_collection: 'auto',
        shipping_address_collection: {
            allowed_countries: ['US'],
        },
        payment_method_types: ['card'],
        line_items: lineItems,
        mode: 'payment',
        success_url: `http://localhost:5000/success.html`,
        cancel_url: `http://localhost:5000/cancel.html`,
    });
    res.json({
        //return session ID
        id: session.id
    });
} catch (err) {
    console.log(err)
}

我想到了。 我有

   const price = await stripe.prices.retrieve(
                userItems[i].stripe-price-id
             ); 

代替

   const price = await stripe.prices.retrieve(
                userItems[i].stripe_price_id
             ); 

謝謝大家,我會匆匆離開,這樣我就可以帶着我龐大而龐大的大腦,繼續享受我的高智商

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM