据说执行构造函数的回调(称为执行器)
new Promise()
始终是同步执行的,因此,出现了以下问题:
- 执行器被称为同步(一旦构造Promise),
和resolveFunc
函数为 争论。rejectFunc
new Promise()
also返回的promise是否在执行器执行后立即同步解析或拒绝?
const myPromise = new Promise((resolve, reject) => {
if (/* some condition */) {
resolve('Promise fulfilled');
} else {
reject('Promise rejected');
}
});
// The promise has been created and its fate (resolved or rejected) is now determined.
// But we can only see its status when JavaScript has completed the execution of the current code and has emptied the callstack
我不想做具体的事情,我只是想评估我的知识。
这有点有趣,从技术上来说你可以说它是
sync
,但从功能上来说它看起来是async
。
我的意思是,Promise 被放置到所谓的
mIcroTask
队列中,该队列在下一个 mAcroTask
队列 => 事件循环之前被耗尽。这就是为什么仍然可以使用纯粹的 Promise 来挂起,而这些 Promise 并不能做真正的 async
事情。
下面是一个示例,您会注意到似乎
Promise
已被执行 async
,但实际上并没有,只是它们被放置在 microTask
队列中,并在下一个事件循环之前耗尽了所有 sync
。 .
运行下面的示例,您会注意到
myPromise
运行得就像 async
一样,并且真正的 setTimeout
在此之后会触发。
async