【发布时间】:2018-12-11 04:15:45
【问题描述】:
如果用户不存在,我们是否可以使用条带 API 调用来创建用户并检索新用户?
说我们这样做:
export const createCustomer = function (email: string) {
return stripe.customers.create({email});
};
即使拥有该电子邮件的用户已经存在,它也会始终创建一个新的客户 ID。 是否有一种方法可以仅在用户电子邮件不存在于条带中时才创建用户?
我只是想避免竞争条件在同一时间范围内可能发生多个stripe.customers.create({email}) 调用。例如,我们检查 customer.id 是否存在,如果不存在,两个不同的服务器请求可能会尝试创建新客户。
这是比赛条件:
const email = 'foo@example.com';
Promise.all([
stripe.customers.retrieve(email).then(function(user){
if(!user){
return stripe.customers.create(email);
}
},
stripe.customers.retrieve(email).then(function(user){
if(!user){
return stripe.customers.create(email);
}
}
])
显然,竞争条件更可能发生在两个不同的进程或两个不同的服务器请求中,而不是同一个服务器请求,但你明白了。
【问题讨论】:
-
我为这个问题在 Github 上用 Stripe 提交了一张票:github.com/stripe/stripe-node/issues/476