Почему обещание разрешается? - PullRequest
4 голосов
/ 25 октября 2019

У меня есть следующий код:

class Request {
  constructor(method, url) {
    this.method = method;
    this.url = url;
  }

  send() {
    return fetch(this.url, { method: this.method })
      .then((res) => res.json());
  }
}

const url = "https://ron-swanson-quotes.herokuapp.com/v2/quotes";
const getQuotes = new Request("get", url);

const all = {
  getQuotes
};

getQuotes.send().then(alert);
delete all.getQuotes;

Может кто-нибудь, пожалуйста, объяснить, почему getQuotes.send() разрешается даже после того, как я явно удалил экземпляр класса, для которого было выполнено обещание.

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Вы удалили ссылку на экземпляр Request из объекта all. Т.е. удалено свойство getQuotes. Констант getQuotes, определенный ранее, все еще там, и обещание все еще выполняется.

0 голосов
/ 25 октября 2019

Поскольку вы выполняете обещание на .then((res) => res.json()); (внутри send(), а также на .then(alert)). Кстати: когда вы выполняете код

const getQuotes = new Request("get", url);
const all = { getQuotes };

, тогда вы запрашиваете объект в двух местах: в getQuotes константе и в all.getQuotes поле объекта. Поэтому, когда вы выполнили delete all.getQuotes, константа getQuotes все еще не пуста (но это не является причиной выполнения обещания).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...