我有这段代码:
function createPlan(amount) {
return stripe.plans.create({
product: 'DigitLead website evaluation tool',
nickname: 'DigitLead website evaluation tool monthly charge',
currency: 'cad',
interval: 'month',
amount: amount,
});
}
var product = stripe.products.create({
name: 'DigitLead website evaluation tool monthly charge',
type: 'service',
});
console.log(time);
if (time === '1') {
var amount = 1499;
var days = 30;
var plan = createPlan(1499);
}
else if (time === '3') {
amount = 999 * 3;
days = 90;
plan = createPlan(999);
}
plan.then(p => console.log("p " + p));
if (typeof req.user.stripeId === undefined) {
var customer = stripe.customers.create({
email: req.user.username,
source: req.body.stripeToken,
});
}
看起来不错,但问题是,这段代码是异步的。因此,当我尝试使用plan
变量创建product
时,它并不存在。
我可以使用then
链接,但它会像所有地狱一样混乱。我试图像这样添加await
来完成它:
var product = stripe.products.create({
name: 'DigitLead website evaluation tool monthly charge',
type: 'service',
});
,但节点刚说:
/home/iron/Documents/Projects/digitLead/routes/payment.js:46
var product = await stripe.products.create({
^^^^^
SyntaxError: await is only valid in async function
我不想使用回调地狱,所以我不知道该怎么做。在普通代码中,我只需编写一个函数async
并返回一个承诺。在这里,我使用Stripe API,因此我无法真正编辑任何内容。
答案 0 :(得分:3)
我们只能在async函数中使用await。因此,您可以将其包装在异步IIFE中:
var product = (async(name, type) => await stripe.products.create({
name,
type
}))(name, type);
答案 1 :(得分:2)
await
只能在异步函数中使用。因此,您需要将您所在的功能标记为async
。如果您不在函数内部,则需要将代码包装到函数中。
然后,您就可以在代码行上使用await
,或使用Promise .then
语法。例如:
async function createProduct(name, type) {
return await stripe.products.create({name, type});
}
答案 2 :(得分:2)
您的语法错误仅表示您需要将该函数标记为异步。如果stripe.plans.create是异步的,您可以添加等待它。
async function createPlan(amount) {
return await stripe.plans.create({
product: 'DigitLead website evaluation tool',
nickname: 'DigitLead website evaluation tool monthly charge',
currency: 'cad',
interval: 'month',
amount: amount,
});
}