Javascript 当我们使用Promises时,XMLHttpRequest.onreadystatechange是否仍然会在幕后被调用?

Javascript 当我们使用Promises时,XMLHttpRequest.onreadystatechange是否仍然会在幕后被调用?,javascript,ajax,promise,Javascript,Ajax,Promise,假设我正在使用一个PromisifiedAPI来发出Ajax请求,即使事件循环仍会调用普通的XMLHttpRequest.onreadystatechange对吗 我的意思是,承诺是以顺序方式编写代码的一种很好的方式,但在幕后发生的事情仍然是普通的旧机制,对吗?有点像ECMASCRIPT 6中的class语法。换句话说,核心API仍然是一样的吗 我看不出如何将一个承诺直接注册到一个事件循环,因为应该有一些逻辑可以“解析”或“拒绝”,所以必须存在一个简单的包装器[也可以实现一个承诺,我不知道它是否

假设我正在使用一个
Promisified
API来发出
Ajax请求
,即使
事件循环
仍会调用普通的
XMLHttpRequest.onreadystatechange
对吗

我的意思是,承诺是以顺序方式编写代码的一种很好的方式,但在幕后发生的事情仍然是普通的旧机制,对吗?有点像
ECMASCRIPT 6
中的
class
语法。换句话说,核心API仍然是一样的吗

我看不出如何将一个
承诺
直接注册到一个
事件循环
,因为应该有一些逻辑可以“解析”或“拒绝”,所以必须存在一个简单的包装器[也可以实现一个承诺,我不知道它是否会导致太多承诺]

假设我正在使用一个Promisified API来发出Ajax请求,即使这样,事件循环仍然会调用普通的老XMLHttpRequest.onreadystatechange,对吗

有几种方法可以发出Ajax请求

围绕XHR包装承诺的库可以使用
readystatechange
事件。它可以使用
load
error
事件

基于promise的Ajax库可以完全避免XHR

它可以使用JSONP

fetch
在浏览器中本机支持,基于承诺,不接近XHR

有点像ECMASCRIPT 6中的类语法。换句话说,核心API仍然是一样的吗

没有

Promises是一个标准化的API,而不仅仅是与现有代码做相同事情的不同语法

假设我正在使用一个Promisified API来发出Ajax请求,即使这样,事件循环仍然会调用普通的老XMLHttpRequest.onreadystatechange,对吗

有几种方法可以发出Ajax请求

围绕XHR包装承诺的库可以使用
readystatechange
事件。它可以使用
load
error
事件

基于promise的Ajax库可以完全避免XHR

它可以使用JSONP

fetch
在浏览器中本机支持,基于承诺,不接近XHR

有点像ECMASCRIPT 6中的类语法。换句话说,核心API仍然是一样的吗

没有


承诺是一个标准化的API,而不仅仅是与现有代码做相同事情的不同语法。

这些承诺的实现完全取决于实现它的库。但是,是的,这是一个合乎逻辑的方法。你想要回答的问题是什么?你的逻辑合乎逻辑吗?对Promisified API是否注册到某个事件?如果他们真的在XHR上构建,那么很可能是的(为此进行轮询循环将是一件很遗憾的事情)。如果他们使用的是已经内置的基于承诺的API,比如fetch,那么就不是了。这些承诺的实现完全取决于实现它的库。但是,是的,这是一个合乎逻辑的方法。你想要回答的问题是什么?你的逻辑合乎逻辑吗?对Promisified API是否注册到某个事件?如果他们真的在XHR上构建,那么很可能是的(为此进行轮询循环将是一件很遗憾的事情)。如果他们使用的是一个内置的基于承诺的API,比如fetch,那么就不是了。那么,如果只是尝试可视化事件循环,它会直接调用承诺吗?如果是,它会调用哪个承诺-
resolve
还是
reject
?除非有一个包装器来决定哪一个,否则我无法想象它是如何完成的。无论如何,我将检查
fetch
API。这可能解释了这一点吗?它返回一个承诺,该承诺将解析对该请求的响应,无论请求是否成功。这是源代码。因此,只要尝试可视化事件循环,它是否会直接调用承诺,如果是,它会调用哪个-
resolve
reject
?除非有一个包装器来决定哪一个,否则我无法想象它是如何完成的。无论如何,我将检查
fetch
API。这可能解释了这一点吗?它返回一个承诺,该承诺将解析对该请求的响应,无论请求是否成功。这是我的。