- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个库。有一次我创建了一个 promise,然后在稍后猛扑向它添加 then/catch
处理程序。在我实际附加错误处理程序之前,promise 可能会失败。这对我来说很好; promise 可以像薛定谔猫一样存在,直到我稍后决定查看它。
问题是,如果任何 promise 在没有错误处理程序的情况下被拒绝,某些环境会触发全局事件。也许我的一个用户做了一些像this这样的过激行为在节点中:
process.on('unhandledRejection', function(reason){
console.error('oops', reason);
process.exit(1);
});
如果我知道我稍后会去检查它的结果,我不希望我拒绝的 promise 触发它。
是否有一些正式的方法可以标记 promise 以将其从任何全局“未处理的拒绝”事件中排除,或者我真的必须将错误处理程序同步附加到每个 promise 以避免这种情况吗?
最佳答案
提交有关环境(节点)的错误。环境没有以脚本可观察到的方式对其执行任何业务。
在 Firefox 和 Chrome 中没有脚本可观察的结果 AFAIK。
尽管 Chrome 最初会在控制台中将此标记为“未处理的 promise 拒绝”,并带有 ✖ 符号,并将其称为错误,但如果随后处理了 promise ,它将 ✖ 更改为 ✓,它稍后会退缩,并将其语言更改为“1 handled promise rejection”。
Firefox 只会在未处理的 promise 拒绝被垃圾收集时提示。
解决方法可能是添加一个hold
函数,例如:
var hold = p => (p.catch(() => {}), p);
然后只要您知道稍后会得到一个 promise ,就可以使用它来使 Node 静音:
var console = { log: msg => div.innerHTML += msg + "<br>" };
window.onerror = () => console.log("window onerror fired");
var wait = ms => new Promise(resolve => setTimeout(resolve, ms));
var hold = p => (p.catch(() => {}), p);
var p = hold(Promise.reject(new Error("failure")));
wait(2000).then(() => p).catch(e => console.log(e.message + " handled."));
<div id="div"></div>
关于javascript - 防止 promise 触发全局 'unhandled rejection' 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229681/
我一直在努力理解下面两个的区别,哪个是空闲的使用方式: let getClient = () => { return connect() .then((client) => {
我正在学习一门关于 JavaScript 函数式编程的很棒的在线类(class)。在讲师使用 Array.prototype.reject() 并且它在运行时对我不起作用之前,我一直很好。 我想使用“
这个问题在这里已经有了答案: Do I need to return after early resolve/reject? (6 个答案) 关闭 6 年前。 我是 Promise 的新手,我想知道
我对 Angular JS deferred 和 $q 感到困惑。我找到了这个 SO Question这解释了 $q.defer() 和 $q 之间的区别。它解释了 $q.reject is a sh
我正在尝试处理 Angular $q 服务及其相关对象和 API。当我查看控制台中的对象时,我看到: var deferred = $q.defer() ...(and then from conso
我在运行测试时遇到问题(在 Node 中), 我正在模拟一个被拒绝的 promise ,我的代码应该重试(使用 promise-retry 如果可能相关的话)。 当我使用 stub.returns(P
当我编译或运行它时,程序会显示正确的信息。问题是当我检查程序时。它显示“:(拒绝”“分钟检查我的时等待输入被拒绝时超时”程序。我也尝试使用 GetInt 和 get_int 。你能帮助我吗,请? in
对于 Ruby 中的 Hash,reject! 和 reject 与 delete_if 有何不同?谁能用简单的代码片段解释它们之间的区别? 最佳答案 由于其他答案指的是 Array#delete_i
当我尝试使用 Firestore 获取数据时,出现上述错误 - 我正在尝试从数据库检索 token ,以便可以发送消息: exports.getUsers = functions.https.onRe
这个问题在这里已经有了答案: Are JavaScript forever-pending promises bad? (2 个答案) 关闭 4 年前。 问题是这样的 function demo()
您好,我正在尝试调用返回 promise 的异步函数 makeRemoteExecutableSchema。 async function run() { const schema = await
我发出的每个 http 请求似乎都会出现此错误。我不太确定它来自哪里? (node:39390) UnhandledPromiseRejectionWarning:未处理的 promise 拒绝(拒绝
我的代码运行良好,但今天运行时发生了这种情况: (node:8592) UnhandledPromiseRejectionWarning: Unhandled promise rejection (r
我正在尝试从 mlabs 连接 mongodb。我插入了以下代码: Mongoose.connect('mongodb://:@ds163402.mlab.com:63402/projecttwist
我已将 Cucumber 与 nightwatch.js 集成。 我的 package.json 看起来像:- { "name": "learning-nightwatch", "versio
目前,我在“Javascript”代码中遇到了 promise 问题。它不断抛出“TypeError: res.status(...).json(...).catch is not a functio
首先,请看这个demo。 function loadImageAsync(url) { return new Promise(function(resolve, reject) { var
我已经在这个问题上工作了很长时间,但我无法真正解决它。当我执行 ionic Cordova build android 时,它运行良好,直到它到达 Cordova build android,任何人都
不知道是什么导致了这个问题。昨天它运行良好。今天,当我尝试运行 react-native run-android 时。我收到这个错误。有任何想法吗? Starting JS server... Run
我是第一次使用.then,而不是.then我使用回调函数。 下面是我的代码片段: phantom.create().then(function (ph) { ph.createPage().t
我是一名优秀的程序员,十分优秀!