javascript - 拒绝 promise 会抛出 "Uncaught (in promise)"

标签 javascript angular promise zone.js

我正在使用 promises to handle 来处理模式对话框:当用户按下 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)

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

最佳答案

您必须捕获它以防止错误

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

关于javascript - 拒绝 promise 会抛出 "Uncaught (in promise)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49996919/

相关文章:

javascript - AngularJS:如何获取 $http 结果作为函数的返回值?

javascript - 使用 Turbolinks 使哈希链接在 Chrome 中工作

如果数组超过 10 个项目,Javascript 按子数组中的值对数组进行排序

javascript - 提交后重置输入字段

javascript - 然后返回 Promise 内的 Promise 链

javascript - 等待多个并发 await 操作

javascript - 如何通过将 Cypress 指定为项目来让 Cypress 运行特定的测试文件夹?

angular - 主体和行为主体有什么区别?

javascript - 如何在规范文件中注入(inject)服务 Angular Testing (Jasmine/karma)

javascript - 检查属性与检查函数返回值的性能如何?