拒绝承诺会抛出 "Uncaught (in promise)"
Rejecting a promise throws "Uncaught (in promise)"
我正在使用 promises to handle 来处理模态对话框:当用户按下“确定”按钮时解决,当取消或关闭时拒绝。
要解决和关闭模态,我使用以下方法:
let modalResolve, modalReject;
modal.promise = new Promise<any>((resolve, reject) => {
modalResolve = resolve;
modalReject = reject;
});
modal.close = (result) => {
if (modal.isOpen) {
modalResolve(result);
}
};
modal.dismiss = (reason) => {
if (modal.isOpen) {
modalReject(reason);
}
};
modal.promise.finally(() => modalElement.remove());
当取消按钮在模式中触发此方法时:
modal.dismiss('close')
一切正常,模态隐藏,但控制台错误记录在这个描述和堆栈中:
Error: Uncaught (in promise): close
at resolvePromise (zone.js:814)
at resolvePromise (zone.js:771)
at eval (zone.js:873)
at ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:4751)
at ZoneDelegate.invokeTask (zone.js:420)
at Zone.runTask (zone.js:188)
at drainMicroTaskQueue (zone.js:595)
at ZoneTask.invokeTask [as invoke] (zone.js:500)
at invokeTask (zone.js:1540)
这很奇怪,因为模态无论如何都被关闭了,而且这个错误并没有显示在我使用的所有模态上,只是在其中一些模态上。解析不会产生此类错误。
您必须catch
它以防止错误
modal.promise.then(hideFn, hideFn).catch((res) => {});
就像Amaya说的,你必须使用catch
来捕获错误,否则它会变成UnhandledPromiseRejection
,不同的promise
供应商有不同的实现来处理这种UnhandledPromiseRejection
,但无论哪种方式,它都会在某个时候抛出,所以 zone.js
将在下一个 tick
.
抛出错误
而且我看你已经用finally了,如果你用finally UnhandledPromiseRejection
应该不会抛出,但是你需要用zone.js 0.8.26
来支持Promise.finally
,如果还是报错升级 zone.js
时存在,请告诉我或在 zone.js
存储库中提出问题,https://github.com/angular/zone.js/issues
我正在使用 promises to handle 来处理模态对话框:当用户按下“确定”按钮时解决,当取消或关闭时拒绝。
要解决和关闭模态,我使用以下方法:
let modalResolve, modalReject;
modal.promise = new Promise<any>((resolve, reject) => {
modalResolve = resolve;
modalReject = reject;
});
modal.close = (result) => {
if (modal.isOpen) {
modalResolve(result);
}
};
modal.dismiss = (reason) => {
if (modal.isOpen) {
modalReject(reason);
}
};
modal.promise.finally(() => modalElement.remove());
当取消按钮在模式中触发此方法时:
modal.dismiss('close')
一切正常,模态隐藏,但控制台错误记录在这个描述和堆栈中:
Error: Uncaught (in promise): close
at resolvePromise (zone.js:814)
at resolvePromise (zone.js:771)
at eval (zone.js:873)
at ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:4751)
at ZoneDelegate.invokeTask (zone.js:420)
at Zone.runTask (zone.js:188)
at drainMicroTaskQueue (zone.js:595)
at ZoneTask.invokeTask [as invoke] (zone.js:500)
at invokeTask (zone.js:1540)
这很奇怪,因为模态无论如何都被关闭了,而且这个错误并没有显示在我使用的所有模态上,只是在其中一些模态上。解析不会产生此类错误。
您必须catch
它以防止错误
modal.promise.then(hideFn, hideFn).catch((res) => {});
就像Amaya说的,你必须使用catch
来捕获错误,否则它会变成UnhandledPromiseRejection
,不同的promise
供应商有不同的实现来处理这种UnhandledPromiseRejection
,但无论哪种方式,它都会在某个时候抛出,所以 zone.js
将在下一个 tick
.
而且我看你已经用finally了,如果你用finally UnhandledPromiseRejection
应该不会抛出,但是你需要用zone.js 0.8.26
来支持Promise.finally
,如果还是报错升级 zone.js
时存在,请告诉我或在 zone.js
存储库中提出问题,https://github.com/angular/zone.js/issues