在我的离子应用程序中,我正在Cloud Functions中调用Firebase身份验证触发器,从而创建了Stripe客户。 创建Stripe客户后,它将客户ID存储到Firebase实时数据库。 问题来了,Stripe API需要时间来创建客户。在此之前,我执行下一条语句,并寻找stripe的customer_id(仍未生成)和代码中断。我如何使代码等待创建条带用户并将customer_id存储到数据库之后再移至下一条语句。
注意::如果我将调试点放在控制台中,它会稍等片刻
此处代码
createacnt() {
//Create Firebase account
this.customer.Email = this.customer.Email.trim();
this.afAuth.auth.createUserWithEmailAndPassword(this.customer.Email, this.user.password)
.then(userDetails => {
//Update Firebase account
this.angularDb.object("/Customers/" + userDetails.uid).update({
uid: userDetails.uid,
accountid: this.customer.AccountId,
email: this.customer.Email
}).then(success => {
// here goes the other code in whcih
// I am trying to get customer id of stripe user
this.angularDb.object('/Customers/'+userDetails.uid)
.valueChanges().take(1).subscribe((afUser:any) => {
this.user.uid = afUser.uid;
//here code breaks and syas customer_id is undefined
this.customer_id = afUser.payment_sources.customer_id;
});
});
}
在火力场上触发
exports.createStripeCustomer = functions.auth.user().onCreate(user => {
return stripe.customers.create({
email: user.email
}).then(customer => {
console.log("Stripe customer created" + customer.id);
return admin.database().ref(`/Customers/${user.uid}/payment_sources/customer_id`).set(customer.id);
});
});
答案 0 :(得分:0)
您可以让客户端收听由Cloud Function写入的位置。这样您才能知道工作何时完成。不要一次性查询。听结果,仅在该位置发现数据时继续进行。