当在 then 内部使用 setTimeout 时,Promises 将什么值传递给 then 以及为什么它会递增?
What value is passed by Promises to then when setTimeout is used inside then and why it increment?
当你运行这个代码
Promise.resolve(console.log('resolved'))
.then(pass => setTimeout((pass) => console.log(`1 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`2 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`3 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`4 then pass=${pass}`), 1000, pass))
.then(pass => console.log(`5 then pass=${pass}`))
.then(pass => console.log(`6 then pass=${pass}`))
你在控制台中得到这个
resolved
5 then pass=4
6 then pass=undefined
1 then pass=undefined
2 then pass=1
3 then pass=2
4 then pass=3
所以问题是这个传递变量从哪里获得它的值?它在哪里存储为 window.pass == undefined?为什么会递增?为什么当我们停止使用 setTimeout 时它最终变得未定义?
setTimeout
return 是一个 TimerID,因此这是传递的值。
1
和 6
是 console.log
调用的结果 return undefined
.
当你运行这个代码
Promise.resolve(console.log('resolved'))
.then(pass => setTimeout((pass) => console.log(`1 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`2 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`3 then pass=${pass}`), 1000, pass))
.then(pass => setTimeout((pass) => console.log(`4 then pass=${pass}`), 1000, pass))
.then(pass => console.log(`5 then pass=${pass}`))
.then(pass => console.log(`6 then pass=${pass}`))
你在控制台中得到这个
resolved
5 then pass=4
6 then pass=undefined
1 then pass=undefined
2 then pass=1
3 then pass=2
4 then pass=3
所以问题是这个传递变量从哪里获得它的值?它在哪里存储为 window.pass == undefined?为什么会递增?为什么当我们停止使用 setTimeout 时它最终变得未定义?
setTimeout
return 是一个 TimerID,因此这是传递的值。
1
和 6
是 console.log
调用的结果 return undefined
.