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