【发布时间】:2018-05-31 04:05:45
【问题描述】:
问题:
只有在收费成功的情况下,我才想对我的数据库进行更改。
目前情况并非如此。 ARef.push(object) 在收费处理完成之前触发。
我的语法有什么问题?
代码:
router.post("/", (req, res) => {
var amount = req.body.amount;
var object;
var ARef = admin.database().ref("ref");
var ARefList;
amount = amount * 100;
var object = {
amount: amount,
email: email,
inversedTimeStamp: now
}
stripe.customers.create({
email: req.body.stripeEmail,
source: req.body.stripeToken
})
.then(customer =>
stripe.charges.create({
amount: amount,
description: "desc",
currency: "usd",
customer: customer.id
})
)
.then(charge =>
ARef.transaction(function(dbAmount){
if (!dbAmount) {
dbAmount = 0;
}
dbAmount = dbAmount + amount/100;
return dbAmount;
})
)
.then(
// this happens regardless of the success of the charge
ARef.push(object)
//
)
.then (
ARefList.push(object)
)
.then(
res.render("received",{amount:amount/100})
);
});
【问题讨论】:
-
@T.J.Crowder 抱歉。我删除了那部分代码,因为它在这里不相关:/我的问题是 ARef.push(object) 在条带承诺完成处理费用之前触发。
-
哪个代码“处理收费”?那个
stripe.charges.create的东西?它会返回一个承诺吗? -
.then 无论promise是失败还是成功都会被执行。这就是你的想法吗?
-
@TheProgrammer:好的。不过,它看起来不正确,FWIW。
-
@T.J.Crowder 我认为你一定是对的:我只是想一次修复我的代码。
标签: javascript jquery html promise stripe-payments