Uncaught (in promise) отменить с помощью SweetAlert2
Как правильно избежать кнопки отмены, не вызывая ошибки при использовании обещаний? Мой код выдает подтверждение предупреждения с обязательным флажком. код выполняется так, как он должен выполняться для пользователя, но он выдает ошибку в окне консоли:
Uncaught (в обещании) отмена
//validation logic all passes...Now proceed to...
else
{
//determine and parse Discounts
var myLookup = document.getElementsByName("myLookup")[0].value;
$.post( "findthem.php", {myLookup: myLookup })
.done(function(json_data){
var theResponse1 = $.parseJSON(json_data);
myDiscountRate = theResponse1['ourDiscountFound'];
}).then( function(callback){
priceRate = priceRate * (1 - (.01 * myDiscountRate));
newRate = priceRate.toFixed(2);
}
swal({
title: "Confirm",
input: 'checkbox',
inputValue: 0,
type: "warning",
inputPlaceholder: 'I agree to <a href="#blahblahMore"></a> Your new Rate is :'+newRate,
showCancelButton: true,
confirmButtonText: 'Confirm',
showLoaderOnConfirm: true,
preConfirm: function(result) {
return new Promise(function(resolve, reject) {
if (result) {
$.post("my.php", {
Data: data
})
.done(
function(json_data) {
var data_array = $.parseJSON(json_data);
var moreDetails = '';
var resulting = 'error';
var details = "Transaction Declined"
if (data_array["trxApproved"] == true) {
resulting = 'success';
details = "Confirmed"
moreDetails = "<br>Approved<b>" + data_array["approved"] + "</b>" +
"<br>Details Code: <b>" + data_array["detailsCode"] + "</b>";
}
swal({
type: resulting,
title: details,
html: "<h1>Details: </h1>" + data_array["messagetext"] + moreDetails
});
}
);
resolve();
} else {
reject('You must agree to our Terms & Conditions ');
}
});
},
allowOutsideClick: false
}).then(function(json_data) {
})
});
3 ответов
Обновление (Январь 2017): эта проблема была исправлена в v7:руководство по обновлению v7 ↗
вам нужно добавить обработчик отклонения к обещанию. Кроме того, вы можете использовать .catch(swal.noop)
как быстрый способ просто подавить ошибки:
swal('...')
.catch(swal.noop);
PS. пакет вы используете называется SweetAlert2, не SweetAlert. В будущих вопросах, пожалуйста, упомяните об этом, чтобы вы могли получить более актуальные ответы.
SweetAlert2 отклоняет обещание результата при нажатии кнопки отмены. Ты можешь!--4-->ручка, что:
swal({
…
}).then(function(json_data) {
…
}, function(dismiss) {
if (dismiss === 'cancel') { // you might also handle 'close' or 'timer' if you used those
// ignore
} else {
throw dismiss;
}
})
Если вам не нужно ничего делать с json_data
, вы также можете использовать catch
метод.
new Promise(function(resolve, reject) {
Не надо. $.post()
возвращает объект jQuery обещание.
возможные заменители решением Promise.reject()
на new Promise()
конструктор; удалены .then()
Это было помещено в качестве опции для first swal()
вызов; шаблон, похоже, ожидает Promise
будет возвращен из preConfirm
, хотя и не уверен, какое значение, как ожидается, будет возвращено из .done()
кроме json_data
.
swal({
title: "Confirm",
input: 'checkbox',
inputValue: 0,
type: "warning",
inputPlaceholder: 'I agree to <a href="#blahblahMore"></a>',
showCancelButton: true,
confirmButtonText: 'Confirm',
showLoaderOnConfirm: true,
preConfirm: function(result) {
if (result) {
return $.post("my.php", {
Data: data
})
.done(
function(json_data) {
var data_array = $.parseJSON(json_data);
var moreDetails = '';
var resulting = 'error';
var details = "Transaction Declined"
if (data_array["trxApproved"] == true) {
resulting = 'success';
details = "Confirmed"
moreDetails = "<br>Approved<b>" + data_array["approved"] + "</b>" +
"<br>Details Code: <b>" + data_array["detailsCode"] + "</b>";
}
swal({
type: resulting,
title: details,
html: "<h1>Details: </h1>" + data_array["messagetext"] + moreDetails
});
}
);
} else {
return Promise.reject('You must agree to our Terms & Conditions ');
}
},
allowOutsideClick: false
});