我最近遇到了一个奇怪的错误。我有这个简单的函数返回 一个承诺:
create(data) {
let _self = this;
return new Promise(function(resolve, reject) {
if(_self._validateData(data)) {
//is valid, so store in database...
} else {
reject(_self.error);
}
});
}
当数据有效时,存储数据并且调用解析回调没有问题。但是,当数据无效时,我立即调用拒绝功能。但是当我这样做时,我收到一个错误。
在进程到达拒绝调用时,是否有可能调用函数未设置拒绝?因为当我运行以下代码时,它完美地运行:
create(data) {
let _self = this;
return new Promise(function(resolve, reject) {
if(_self._validateData(data)) {
//is valid, so store in database...
} else {
setTimeout(function(){reject(_self.error);}, 100);
}
});
}
我真的想避免使用此解决方案。不仅因为它对我来说看起来很难看,而且因为我甚至不确定,如果我理解错误的话。
所以任何想法在这里有什么问题,我该如何解决?
对于遇到同样问题的每个人: 这不是一个真正的错误,而是一个"功能" VS Code Debugger(使用v8)。 有关详细信息,请参阅here和here。该问题被称为"同步拒绝"。另外,我只是把它误解为错误。它不是。调试器只是暂停并指出,存在同步拒绝 我继续使用蓝鸟承诺
答案 0 :(得分:1)
在进程到达拒绝调用时,是否有可能调用函数未设置拒绝?
不,那是不可能的。您可以随时拒绝承诺。
因为当我[暂停时],它完美地运作
我猜你很快就没有在你的承诺链上设置拒绝处理程序(.catch(…)
),并因此而收到“可能未处理的承诺拒绝”警告。