promise.then 内部没有 resolve 直接 return 是怎么执行下一个 then 的函数的
直接上代码
function Promise(fn) {
this.cbs = [];
const resolve = value => {
this.data = value;
this.cbs.forEach(cb => cb(value));
};
fn(resolve);
}
Promise.prototype.then = function(onResolved) {
const p2 = new Promise(resolve => {
this.cbs.push(() => {
const res = onResolved(this.data);
if (res instanceof Promise) {
res.then(resolve);
} else {
resolve(res);
}
});
});
console.log(onResolved, this.cbs);
return p2;
};
new Promise(resolve => {
setTimeout(() => {
resolve(1111);
}, 500);
})
.then(data => 123) //这里没有 resolve 也就是没有执行 this.cbs.forEach 是怎么打印出 123 的
.then(data => {
console.log(data);
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
拆成上面这样来看
p1:是一个Promise实例
p2:是p1.then((data) => 123)返回的新的Promise
注意:此时p1的cbs里有一个回调p1c,p1c“闭包”了p2的resolve
p3:是p2.then((data) => { console.log(">>>", data) })返回的Promise
注意:此时p2的cbs里有一个回调p2c,p2c“闭包”了p3的resolve
500ms过去了,p1的resolve执行,也就是p1的cbs挨个执行,也就是p1c执行,因此p2的resolve执行了;p2的resolve执行了,也就是p2的cbs挨个执行,也就是p2c执行,因此p3的resolve执行了,也就是p3的cbs挨个执行了,但是p3的cbs里啥也没有。
https://developer.mozilla.org...