promise 在 chrome 和 firefox 中的差异
let p1 = new Promise(resolve => {
resolve('promise1 resolved');
})
var p2 = p1.then(function(res){});
console.log('promise2: ',p2);
chrome:{} 里边显示 pending,而下边的 [[PromiseStatus]] 显示 resolved
firefox 执行结果:
p2 是 then() 所返回的 Promise,初始状态为 pending,后边并没有 resolve,应该一直保持 pending 状态才对。firefox 的表现是正确的。不知道为什么 chrome 会显示状态为 resolved ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你要知道 chrome 控制台里打印的对象都是引用, 在你展开时才通过引用求值.
在你
console.log('promise2: ', p2)
执行的这一刻 [[PromiseStatus]] 的值的确是 'pending', 但是当你鼠标移动点击展开时, p2 已经变成 resolve 状态了, 此时你当然看不到 'pending' 这个中间态了, 你可以在console.log('promise2: ', p2)
后加一个debugger
语句, 就可以在控制台看到 p2 此刻的状态了.瞬时状态: