回调在哪里?"/>
当运行异步代码时,Promise执行程序回调在哪里?
Promise
构造函数可以取executor callback function
,这个问题是当执行者回调函数具有异步代码时,该回调函数在执行空间中的位置。
详细信息:
Promise
对象表示一个可能尚不可用的值,但将来会在某个时候解析。它允许您编写异步代码,例如调用远程Web服务,您将创建Promise对象,该对象表示将来Web服务将返回的数据。
直到实际数据可用,Promise对象的作用就像是实际数据的代理。
下面的代码段描述了这种情况:
function getRandomJoke(){
return new Promise((resolve, reject) => {
const request = new XMLHttpRequest();
request.open('GET', '');
request.onload = () => {
if (request.status === 200) {
resolve(request.response); // we got data here, so resolve the Promise
} else {
reject(Error(request.statusText)); // status is not 200 OK, so reject
}
};
request.onerror = () => {
reject(Error('Error fetching data.')); // error occurred, reject the Promise
};
request.send(); // send the request
});
}
根据此thread中的讨论,Promise创建和执行程序回调函数的执行都发生在主线程上,只有解决回调将在事件循环的下一个计时周期执行。
如果是这种情况,上面的代码片段的执行程序函数具有进行API调用的异步代码-也会挂在主线程上,直到API返回数据。
回答如下:如果是这种情况,上面的代码片段的执行程序函数具有进行API调用的异步代码-也会挂在主线程上,直到API返回数据。
更多推荐
当运行异步代码时,Promise执行程序回调在哪里?
发布评论