我读了很多关于诺言的文章。我知道,promise是任务队列的微任务,异步代码执行是任务。在异步代码工作同步代码后的承诺中如何发生(即在经过某些提取之后,我们可以在then块中编写同步代码,我猜然后代码块中的所有代码都是异步的,即使它例如禁止了console.log)?
答案 0 :(得分:1)
根据promise规范,即使当前的promise已经解决,也总是在完成当前执行线程之后异步调用.then()
或.catch()
处理程序。这只是promise实现的一部分,以确保实现这一目标。
因此,即使在已解决承诺的此示例中,您也会在控制台中看到:
A
C
B
console.log("A");
Promise.resolve().then(() => {
console.log("B");
});
console.log("C");
在保证异步代码工作同步代码之后,如何做到这一点(例如,在获取某些内容后,我们可以在then块中编写同步代码,我猜然后代码块中的所有代码都是异步的,即使它禁止了console.log,例如) ?它与异步编程的原理相矛盾。
您可以将所需的任何代码放入.then()
块中。它可以是异步代码或同步代码。这只是代码。在将来.then()
处理程序被调用时,代码将在将来的某个时刻运行。类似于如何将所需的任何代码放入setTimeout()
回调中。计时器控制代码何时开始运行,但对代码没有其他控制。