微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 理解JS Promises

我想更深入地了解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);
}
);

这里有一个link来执行这段代码.

正如您所预测的那样,首先解决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] 举报,一经查实,本站将立刻删除。

相关推荐