![](/img/trans.png)
[英]How to wait for a function to return a value before assigning it to a variable in javascript/mocha
[英]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.