奇怪的 Unhandled promise rejection
如下代码,一直输出Unhandled promise rejection (rejection id: 1): error1
,怎么避免?
主要功能为 getVal 第一次调用预加载,第二次调用时没返回就等,返回了就直接取值
const rejects = [0,1]
let i = 0
function getSummary( id) {
return new Promise((resolve, reject) => {
console.log('rr', id, i)
if(rejects.includes(i)) {
setTimeout(() => reject('error1'), 200)
} else if(id === 1) {
setTimeout(() => resolve(id), 200)
} else {
setTimeout(() => resolve(id), 500)
}
i++
})
}
class Test {
test() {
this.getVal()
setTimeout(async () => {
try {
const val = await this.getVal()
console.log('get1', val)
}catch (ex) {
console.log('error')
}
console.log('get2', await this.getVal())
}, 1000)
}
async getVal() {
try {
if (!this.summary) {
this.summary = getSummary(1).catch(() => getSummary(2)).then((data) => {
this.summary = data
return data
})
} else if(this.summary.then) {
return await this.summary
}
} catch (ex) {
this.summary = null
}
return this.summary
}
}
new Test().test()
已解决见3楼
如1楼所说,第一个 getVal 异常被上抛了,直接 try catch 也不行,只能 Await 才行。
只好去看 await 改成3楼的了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
当
Promise
的状态变为rejection
时没有正确处理,让其一直冒泡(propagation),直至被进程捕获。这个Promise
就被称为unhandled promise rejection
。关键点就是不要让异常上抛。
是不是这个意思
最后改成这样了,不用 async 了
IE9、IE10中就报错Unhandled promise rejection SyntaxError: 语法错误,该怎么解决呢?