拒绝诺言会引发“未捕获(在诺言中)”

Jav*_*rín 5 javascript promise zone.js angular

我正在使用Promise处理模式对话框:当用户按下OK按钮时解决,在取消或关闭时拒绝。

为了解决和消除模态,我使用以下方法:

    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());
Run Code Online (Sandbox Code Playgroud)

当取消按钮在模态内触发此方法时:

modal.dismiss('close')
Run Code Online (Sandbox Code Playgroud)

一切正常,并且模式隐藏,但是使用此描述和堆栈记录了控制台错误:

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)
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为无论如何都已删除了模态,并且此错误并未在我使用的所有模态中显示,仅在其中一些模态中显示。解决不会产生这种错误。

Joh*_*uez 6

您必须catch防止错误

modal.promise.then(hideFn, hideFn).catch((res) => {});
Run Code Online (Sandbox Code Playgroud)