我想检查一下我对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();
答案 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
返回承诺。