嗨 stackoverflow 社区,
我正在尝试使用 for 循环从条带 API 中为userItems数组中的每个项目检索价格 ID
[
{
quantity: '1',
stripe_id: 'prod_IlBmZ4z2QNWeDb',
stripe_price_id: 'price_1I9fOWLY0lC869vlVNfnYqT3',
printful_id: '211335091',
external_id: '6000dcdfa3b443'
}
]
但是我被困在时间死区,导致我检索到“ReferenceError:在初始化之前无法访问'price'”错误
我相信它是因为在条带 API 返回对象item之前声明了它price
item在分配price.unit_amount给对象变量并将其推送到数组之前,如何等到条带返回lineItems?
我一直在摆弄 promise 语法试图解决这个问题,但我在掌握 promises/async/await 时遇到了麻烦(尤其是在 stripe 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)
}
});
谢谢!