我对承诺解决方式的理解正确吗?

时间:2020-07-20 12:07:57

标签: javascript

我可以确认我对以下代码的理解大致正确吗?

function fetchDog(){
  k = fetch("https://dog.ceo/api/breeds/image/random") 
  console.log(k);
};

fetchDog();

k在控制台上显示为Promise对象。由于控制台是实时运行的,因此该承诺确实可以实现。

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

fetchDog();

已兑现的承诺解析为响应对象。它不再是Promise对象,因为它已完全解析为其他对象。

2 个答案:

答案 0 :(得分:3)

否。

一个承诺永远是一个承诺。状态可能会从待处理变为已解决,但是关于promise的任何操作都不会导致引用它们的变量发生变异以引用其已解决的值。

要获取解析值,您需要使用then()await

答案 1 :(得分:1)

首先,已解决的承诺是仍然。该值不会神奇地被覆盖。 .then所做的实际上是在添加一个函数作为侦听器,并说一旦解决了诺言,就以解决诺言的值运行此函数。因此,在函数内部,response不是承诺,而是承诺的内容。实际的承诺仍然存在。考虑以下代码:

const x = Promise.resolve("hello"); // generate a promise that immediately resolves to "hello"
x.then(v => console.log(v));
x.then(v => console.log(v));
// "hello" is logged twice