拒绝承诺" Uncaught(承诺)"

时间:2018-04-24 08:32:33

标签: javascript angular promise zone.js

我使用promises处理模式对话框:当用户按下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());

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

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)

这很奇怪,因为无论如何都会解散模态,并且这个错误并没有在我使用的所有模态中显示,只是在其中一些模态中。解决不会产生这种错误。

2 个答案:

答案 0 :(得分:3)

您必须catch才能防止错误

modal.promise.then(hideFn, hideFn).catch((res) => {});

答案 1 :(得分:0)

就像Amaya说的那样,你必须使用catch来捕捉错误,否则它将成为UnhandledPromiseRejection,不同的promise供应商有不同的实现来处理这种{{1但无论如何,它只是在某个时刻抛出,因此UnhandledPromiseRejection会在下一个zone.js中抛出错误。

我发现你已经终于使用了,如果你最后使用tick不应该被抛出,但你需要使用UnhandledPromiseRejection来支持zone.js 0.8.26,如果错误仍然存​​在的话升级Promise.finally,请告诉我或在zone.js存储库https://github.com/angular/zone.js/issues

中解决问题