Javascript - Uncaught (in promise)
Javascript - Uncaught (in promise)
我有一个函数点击,我使用sweetalert2。下面是函数:
publish = function (article) {
swal({
title: "Skal du publisere?",
text: null,
type: "info",
showCancelButton: true,
cancelButtonText: "Avbyrt",
cancelButtonColor: '#FFF',
confirmButtonColor: "#2E112D",
confirmButtonText: "Ja, publisere"
}).then(function(){
var articleId = $(article).val();
$.post("/admin/articles/publish/article", {
'_token' : $('meta[name="csrf-token"]').attr('content'),
'articleId': articleId
}).done(function(){
$(article).hide();
return swal({
type: 'success',
title: 'Du har publisert den artikkel.',
showConfirmButton: false,
timer: 1000
});
}).fail(function() {
return swal({
type: 'warning',
title: 'Noeting gikk feil, prov igjen',
showConfirmButton: false,
timer: 1000
});
});
}, function(dismiss) {
// dismiss can be 'overlay', 'cancel', 'close', 'esc', 'timer'
if (dismiss === 'cancel') { // you might also handle 'close' or 'timer' if you used those
// ignore
} else {
throw dismiss;
}
})
}
一切正常,但我得到一个错误的定时器:
sweetalert2.min.js:1 Uncaught (in promise) timer
我怎么能避免,我做错了什么?
问题是,你通常不应该调用一个返回承诺的函数,而不对该承诺做一些事情。在这种情况下,承诺返回函数是swal
和$.post
。如果你忽略返回的promise,那么你就不会等待它完成。你的then
处理程序可以返回一个承诺来继续承诺链,像这样:
publish = function (article) {
return swal({
title: "Skal du publisere?",
text: null,
type: "info",
showCancelButton: true,
cancelButtonText: "Avbyrt",
cancelButtonColor: '#FFF',
confirmButtonColor: "#2E112D",
confirmButtonText: "Ja, publisere"
}).then(function(){
$(article).hide();
var articleId = $(article).val();
return $.post("/admin/articles/publish/article", {
'_token' : $('meta[name="csrf-token"]').attr('content'),
'articleId': articleId
}).then(function(){
return swal({
type: 'success',
title: 'Du har publisert den artikkel.',
showConfirmButton: false,
timer: 1000
}).catch(function(timeout) { });
});
}, function(dismiss) {
// dismiss can be 'overlay', 'cancel', 'close', 'esc', 'timer'
if (dismiss === 'cancel') { // you might also handle 'close' or 'timer' if you used those
// ignore
} else {
throw dismiss;
}
})
.catch(function(err) {
console.error(err);
throw err;
})
}
你需要在Promise中添加一个拒绝处理程序。或者,您可以使用.catch(swal.noop)
作为一种快速的方法来简单地抑制错误:
swal('...')
.catch(swal.noop);
这个问题在包文档中提到:https://github.com/limonte/sweetalert2#handling-dismissals
还有一个关于这个主题的封闭问题:limonte/sweetalert2#221
相关文章:
- AngularJS promise in app.run()
- Defer 和 Promise in angularjs 无法正常工作
- JavaScript: Promise chaining in foreach loop
- AngularJs promise in forEach
- 在返回结果之前,我如何等待 jQuery.ajaxComplete in promise.done
- l20n.js: uncatch (in promise) TypeError: element.querySelect
- Factory - Then and Catch Promise Chaining in AngularJS
- onrejected vs catch in Promise
- Javascript - Uncaught (in promise)
- App.jsx:43 Uncaught (in promise) TypeError: this.state.conce
- 如何处理Uncaught (in promise) DOMException: play()请求被pause()调用中断
- 当我在不可达的数据库上调用info()时,未捕获(In promise)
- React ES6 SystemJS - Uncaught (in promise) Error: Unexpected
- 将Json值转换为小写"Uncaught(in promise) "SAPUI5
- Promise in while loop javascript
- 未捕获(in promise) DOMException:订阅失败-没有活动的Service Worker
- ncaught (in promise): Error: ./Search类中的错误Search - inline模板:
- 如何使用Promise in Service AngularJS?示例Data Firebase
- 使用catch in promise进行断言超过超时时间
- Thenables in Promise.all (ES6 and Bluebird)