let p1=new Promise(resolve=>{
resolve()
})
let p2=p1.then(data=>{
return p2
}).then(res=>{
console.log(res,'res')
})
为什么这样promise什么输出都没 也没有报错
let p1=new Promise(resolve=>{
resolve()
})
let p2=p1.then(data=>{
return p2
})
这样就会报错 Uncaught (in promise) TypeError: Chaining cycle detected for promise #<Promise>
then 会返回一个 promise ,这个 promise 使用它的回调的返回值来 resolve 的。
所以在上面,
p1.then
返回的pp1
,是用p2
resolve 的。pp1.then
返回的pp2
,也就是 p2 ,是用回调返回的undefined
resolve 。而,p2 是一个 promise 。所以,
pp1
要等p2
resolve 了它自己才能 resolve ,然后才能调用pp1.then
的回调。同时,p2 要等
pp1.then
的回调被调用并返回之后才能 resolve 。于是互相等,谁也 resolve 不了。死锁。
pp1.then
的回调不会被调用。这个就是用
p2
resolvep2
了。javascript 规定自己resolve自己是一个运行时错误 TypeError