Javascript 承诺到底是什么';s值更新了吗?

Javascript 承诺到底是什么';s值更新了吗?,javascript,promise,Javascript,Promise,让我们假设fetch请求以2ms的速度执行。程序一直在运行。然后,在100毫秒时,请求已完成,但程序尚未完成执行 1。此时,即使程序尚未完成,浏览器是否确实更新了Promise对象中的值,或者当调用堆栈为空时,是否必须在Javascript线程中进行更新 2.如何将onCompleted和onRejected回调排入作业队列? 据我所知,当承诺的状态发生变化时,他们会这样做,但具体是如何做到的? 幕后的浏览器是在“监视”对象中的更改并立即将回调排队,还是在完成执行同步代码时由Javascript

让我们假设
fetch
请求以2ms的速度执行。程序一直在运行。然后,在100毫秒时,请求已完成,但程序尚未完成执行

1。此时,即使程序尚未完成,浏览器是否确实更新了
Promise
对象中的值,或者当调用堆栈为空时,是否必须在Javascript线程中进行更新

2.如何将
onCompleted
onRejected
回调排入作业队列? 据我所知,当承诺的状态发生变化时,他们会这样做,但具体是如何做到的? 幕后的浏览器是在“监视”对象中的更改并立即将回调排队,还是在完成执行同步代码时由Javascript执行

EDIT:我在一门课程中被告知,大致来说,在引擎盖下发生的事情是,
Promise
对象的属性“值”在请求成功完成后立即更新(即使程序仍在运行),并立即触发两件事:更改
Promise
的状态,以及
onFulfillment
数组中的回调,该回调将被放入微任务队列中(假设使用
添加了一个回调,然后
)。这可能吗?
Promise
对象实际上是在Javascript之外修改的,还是在程序完成执行时修改的?
如果我有任何错误,请纠正我。

假设
获取
调用将在100毫秒内成功,请求已正确发送且正文正在流式传输,其中将出现错误。最后一个算法负责解析
window.fetch()
返回的承诺


因此,如果在100毫秒时,浏览器还有其他事情要做,它将继续做它曾经做过的事情。如果完成了,它会觉得有更重要的任务要做(例如UI事件?),那么它会提前完成。当它将继续该获取任务时,它将解析承诺,这样做,它将在该任务完成处理(即在此同步)后立即执行回调。

请参阅从本机调用返回的承诺,是的,这是一个很好的心智模型。实际上,正如@kaido在下面所示,解决承诺的事件通常被安排为宏任务。它几乎不会对执行产生影响。“它是在“监视”对象中的更改吗?”-不是。承诺的值不仅仅是一个通过赋值更改的对象属性,它是一个内部属性,需要使用setter进行设置(如
resolve()
reject()
)。正是这个setter使反应作业排队。我不确定我是否理解“程序仍在运行”。这是什么意思?