我想更深入地了解Promises如何在内部工作.
因此我有一些示例代码:
var p1 = new Promise(
function(resolve, reject) {
window.setTimeout(
function() {
resolve('res called')
}, 2000);
});
var p2 = new Promise(
function(resolve, reject) {
window.setTimeout(
function() {
resolve('res called')
},2000);
});
function chainPromises(){
return p1.then(function(val) {
console.log("p1");
return p2.then(function(val) {
console.log("p2");
return val;
});
});
}
chainPromises().then(function(val) {
console.log(val);
}
);
正如您所预测的那样,首先解决p1,之后是p2,然后最终打印出resolv值.
但API参考声明如下:
"then" returns a new promise equivalent to the value you return from
onFulfilled/onRejected after being passed through Promise.resolve
因此,知道什么时候执行“then”函数会很有趣?
因为代码中的最后“then”被链接到chainPromises(),我首先想到了
它会在函数chainPromises()返回一些东西后执行(在这种情况下是另一个promise).
如果是这种情况,那么最终“then”函数的“val”将是返回的promise.
但相反,最终的“然后”等待,直到返回的第一个“然后”内的所有承诺都已解决.
这绝对有道理,因为通过这种方式,“then”功能可以叠加,但是
我不知道如何做到这一点,因为API规范.并没有真正涵盖“then”返回的内容以及执行“then”函数的时间.
或者换句话说,为什么最后的“then”函数会等到所有Promise都在chainPromises()函数内解析,而不是像api文档所说的那样等待第一个返回的对象.
我希望我能说清楚我的意思..
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。