Javascript 为什么承诺会解决?

Javascript 为什么承诺会解决?,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,我有以下代码: 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

我有以下代码:

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()
仍会解析。

因为您运行了promise by
。然后((res)=>res.json())(在
send()
内部,也可以通过
进一步。然后(警报)
)。顺便说一下:当您执行代码时

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

然后,您请求的对象位于两个位置:在
getQuotes
常量中,以及在
all.getQuotes
对象字段中。因此,当您执行
delete all.getQuotes
时,
getQuotes
常量仍然不是空的(但这不是承诺执行的原因)。

您已经从
all
对象中删除了对
请求
实例的引用。即删除了
getQuotes
属性。前面定义的
getQuotes
常量仍然存在,承诺仍在运行。

对此不确定,但
.json
返回的json对象不是承诺,因此,
then
此处
getQuotes.send().then(警报)
似乎不起作用您正在从对象中删除它,对请求不做任何操作。All
delete All。getQuotes
所做的是将
getQuotes
作为属性从
All
对象中删除。它根本不影响
getQuotes
请求中的任何内容delete
实际上并不删除对象。在这种特殊用法中,它只是从父对象中删除一个属性。你调用delete的对象仍然存在,直到它完成并且符合垃圾收集的条件。你能看看这个问题吗:“promise仍在运行”。承诺不会兑现。他们可能正在等待。它们可以更改状态并被解决或拒绝。。。但他们不跑。它们是物体,说得对。由承诺封装的代码正在运行,但是:)您引用的代码不由承诺封装。而且它也没有运行。唯一正在运行的是JavaScript事件循环,以及一些处理请求的低级操作系统处理。JavaScript将从其队列中接收一些事件,该事件将调用
fetch
API中的实现,该实现将解析
fetch
函数返回的承诺。但只要该事件不出现,JavaScript代码中就不会运行任何东西。