Я использую угловой с базой данных реального времени Firebase. У меня есть приложение, которое выполняет обработку платежей для заказа. Текущий код выглядит следующим образом
Моя ионная страница .ts вызывается при нажатии кнопки, как показано ниже:
startPayment(){
this.instamojoClient = new Instamojo(this.http, this.iab, 'XXX');
var data = this.instamojoClient.getPaymentFields()
this.instamojoClient.payNow(data).then(response => {
//payment is successful now create a order for the customer
this.ddlSvc.createOrder(this.core.order, this.core.user)
}).catch(err => {
console.log("Payment failed: " + JSON.stringify(err))
});
}
createOrder как показано ниже
createOrder(order:Order, customer:User){
console.log("new technique to creating new order for #" + order.orderNumber)
const itemRef = this.db.list('orders')
const payload = {
order: order,
customer: customer
}
itemRef.push(payload).then(
(data) => {
const orderKey = data.key
//create a cross entry in the user as well to maintain history
const userRef = this.db.object('/users/' + customer.uid + "/orders/" + orderKey )
userRef.set(order)
}
)
}
У меня есть несколько вопросов / проблем:
1. startPayment должна быть в состоянии дождаться завершения createOrder, чтобы я мог показать пользователю сообщение об успешном процессе заказа. Что мне вернуть из сервисной функции createOrder, чтобы добиться этого?
Создание заказа делает две вещи: создание заказа для обработки продавцом и создание перекрестной записи против пользователя, который разместил пользователя, чтобы он мог видеть его в своей истории. В основном данные заказа дублируются из-за этого. Это правильная вещь? если нет то что мне делать?
Порядок создания выполняет 2 вещи, как упомянуто выше. Как мне справиться, если первая или вторая операция не удалась? Как я могу убедиться, что у меня нет поврежденных данных?