android平台,为什么只要reject就会报unhandledRejectedPromise? 2.4.3

重现代码:

function test(){ return new Promise((r,rj)=>{ rj("rejected") })}

test().then((s)=>{cc.log(s)}).catch((err)=>{cc.log(err)})

照道理来说, catch就不会有这个错误了呀?

function test(){ return new Promise((r,rj)=>{ setTimeout(()=>rj("rejected"))})}

test().then((s)=>{cc.log(s)}).catch((err)=>{cc.log(err)})

这样写就没问题了, 但是这个表现和浏览器里面是不一致的

1赞

顶一下,我也有相同的疑问

知乎上搜到了篇JS的V8对Promise错误处理的一些实作
https://zhuanlan.zhihu.com/p/145057384

会不会是creator的V8引擎的Promise接了catch后立刻reject的话

promise在这个tick当下还没有被attach到catch的handler上,被认为没有handler于是触发了unhandledRejectedPromise

但若用了setTimeout,过了1tick才被reject,这样就找的到catch handler来处理,就不会触发unhandledRejectedPromise

当然这只是我猜测的推论

不知道有没有对jsb比较熟悉的大佬能帮忙回答下这个疑问

1赞

mark,期待高手解答