У меня есть ситуация, когда я не хочу, чтобы одно обещание закончилось, пока не будет завершен другой (или, возможно, несколько других). в этом случае у меня разные варианты оплаты, и каждый раз, когда пользователь нажимает кнопку, происходит оплата ... пока платежи сделаны, пользователь также может нажать кнопку «Удалить». это приводит к странным условиям гонки, когда удаление обрабатывается до завершения выплаты. Я не хочу, чтобы удаление обрабатывало/удаляло базу данных до тех пор, пока действия оплаты не будут завершены. Вот соответствующий код:
$ctrl.deletePayment = function(paymentRecord) {
PaymentsService.deletePaymentRequest($ctrl.paymentRecord.id, paymentRecord)
.then(updateTotal)
.catch(updateTotal);
}
$ctrl.payOff = function(dataItem) {
let payOffRecords = dataItem.payoffRecords;
PaymentsService.submitPaymentRequestViaPatch($ctrl.temporaryPaymentAdvice.id, payOffRecords)
.then(updateTotal)
.catch(updateTotal);
}
$ctrl.payAllInView = function(payOff) {
let paymentRecords = dataSource.map((rowItem) => {
return rowItem.payoffRecords;
});
if (paymentRecords.length > 0) {
PaymentsService.submitPaymentRequestViaPatch($ctrl.temporaryPaymentAdvice.id, paymentRecords)
.then(updateTotal)
.catch(updateTotal);
}
}
Как я могу предотвратить удаление платежа с момента покупки до того, как действие платежа будет завершено? Я думал о том, что у меня модальное шоу, чтобы блокировать пользовательский интерфейс, но также интересовался, есть ли угловой способ справиться с этим условием асинхронности/гонки.
Не показывайте кнопку, пока она не будет завершена. 'Нг-if'. – ChiefTwoPencils
Вы можете добавить флаг, который позволяет утверждать, что 'isPaying' является истинным при оплате и false в окончательном пункте обещания о выплате. Вы можете включить/отключить кнопку удаления с помощью этого флага. –