我正在使用Oboe.js解析一个非常大的 JSON 文件
const promises = [];
oboe('http://domain/my-file.js')
.node('items.*', item => {
// parseItem() returns a rejected Promise because of invalid JSON items
promises.push(parseItem(item));
})
.done(() => {
Promise.all(promises).then(() => {
doSomething();
});
})
但是我的浏览器控制台被Uncaught (in promise)
. setTimeout()
如果你用like写一个promise也会发生同样的情况
const promises = [];
setTimeout(() => {
promises.push(Promise.reject());
}, 500);
// some time in the future
Promise.all(promises);
真正奇怪的是:现代浏览器的行为不同。在 Firefox 开发者版中,一切正常,没有错误消息,而在 Chrome 中,我被Uncaught (in promise)
. 在 Chrome 中,如果你写Promise.reject();
的时候没有捕捉到,你会立即收到消息。在 Firefox 和 Safari 中没有任何反应。
那么解决这个问题的方法是什么?忽略消息?我的意思是,如果这种行为真的在官方承诺规范中,那么异步代码中的承诺对我来说就没有意义了。