Javascript 如何使用$1.5避免竞争条件
我有一种情况,我不希望一个承诺完成,直到另一个(或可能是其他几个)完成。在这个场景中,我有不同的支付选项,每次用户单击按钮时,都会进行支付。。。付款时,用户还可以单击删除。这导致了奇怪的竞争条件,即在支付结束之前处理删除。在支付操作完成之前,我不希望删除操作处理/点击数据库。以下是相关代码:Javascript 如何使用$1.5避免竞争条件,javascript,angularjs,Javascript,Angularjs,我有一种情况,我不希望一个承诺完成,直到另一个(或可能是其他几个)完成。在这个场景中,我有不同的支付选项,每次用户单击按钮时,都会进行支付。。。付款时,用户还可以单击删除。这导致了奇怪的竞争条件,即在支付结束之前处理删除。在支付操作完成之前,我不希望删除操作处理/点击数据库。以下是相关代码: $ctrl.deletePayment = function(paymentRecord) { PaymentsService.deletePaymentRequest($ctrl.paymentRe
$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);
}
}
在付款操作完成之前,如何阻止deletePayment处理?我正在考虑使用一个模式显示来阻止UI,但我也想知道是否有一种角度的方法来处理这种异步/竞争条件 您可能希望存储承诺以供参考,并在继续之前使用
$q.all(…)
确保所有内容都已完成。大致如下:
let promises = [];
$ctrl.deletePayment = function(paymentRecord) {
$q.all(promises).then((values) => {
promises = [ PaymentsService.deletePaymentRequest(...)
.then(updateTemporaryPaymentAdviceTotal)
.catch(updateTemporaryPaymentAdviceTotal) ];
});
}
…调用每个方法时,都需要将其承诺添加到承诺数组。您可能希望存储该承诺以供参考,并使用
$q.all(…)
确保在继续之前完成所有操作。大致如下:
let promises = [];
$ctrl.deletePayment = function(paymentRecord) {
$q.all(promises).then((values) => {
promises = [ PaymentsService.deletePaymentRequest(...)
.then(updateTemporaryPaymentAdviceTotal)
.catch(updateTemporaryPaymentAdviceTotal) ];
});
}
…调用每个方法时,都需要将其承诺添加到承诺数组。在完成之前不要显示按钮
ng if
。您可以在付款承诺的finally条款中添加一个标志,比如说isPaying
,使其在付款时为true,在付款承诺的finally条款中为false。。您可以使用此标志启用/禁用“删除”按钮。在完成之前不要显示该按钮ng if
。您可以在付款承诺的finally条款中添加一个标志,比如说isPaying
,使其在付款时为true,在付款承诺的finally条款中为false。。您可以使用此标志启用/禁用删除按钮。