为什么Promise.prototype.then总是返回承诺?

时间:2020-07-20 17:48:48

标签: javascript

我想检查一下我对Promise.prototype.then的理解是否正确。

在规格(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then)中显示:

如果是处理程序函数:

返回一个值,然后使用 返回值作为其值。

如果我只是从.then的回调中返回了5之类的简单内容,.then返回一个promise对象是否有点奇怪?这个诺言对象如何解决?似乎并没有从任何地方获取东西。这样的诺言总是兑现吗?

function fetchDog(){
  fetch("https://dog.ceo/api/breeds/image/random") 
  .then(response => 5) 
  .then(data => console.log(data))
};

fetchDog();

2 个答案:

答案 0 :(得分:1)

then()的调用必须根据Promises/A+ specification, 2.2.7返回承诺(在EcmaScript specs中也有体现)。

在对诺言A调用then()时,将返回诺言B,但此时会执行回调。目前还不清楚诺言B是否以及如何解决。仅在基本承诺A解析后,才会异步调用then-callback。

当A解析后,将调用then-callback,该调用将确定如何承诺B解析。因此,当回调返回5时,它将是诺言B解析所用的值。如果它是undefined,那就是它。只有当返回的值是另一个诺言C(或至少是一个可兑收益)时,才会有级联效应,诺言B会将其分辨率链接到C的分辨率。

答案 1 :(得分:0)

传递给then的回调函数必须在与它关联的承诺得到解决之前才能运行,但是then必须立即返回,因此then返回承诺。