JavaScript-Promise Chaining如何在内存中工作?

前端之家收集整理的这篇文章主要介绍了JavaScript-Promise Chaining如何在内存中工作? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

function foo() {
  console.log('foo called')
  return Promise.resolve(5)
}
foo()
  .then(res => {
    console.log(res)
  })
console.log('hi')

控制台输出

1.) 'foo called'

2.) 'hi'

3.) 5

我的主要问题是,当全局执行上下文线程完成并从执行堆栈中弹出时,实际上发生了什么.如果未将Promise对象分配给全局执行上下文中的变量,JS / V8如何知道此Promise对象在内存中的位置?它如何知道在哪里更新Promise值并触发onfullfilment函数

最佳答案
查看the V8 source code,我们可以看到when a Promise is created已绑定到当前执行上下文,即使您没有将其存储在变量中.

Node* const native_context = LoadNativeContext(context);
Node* const promise = AllocateAndInitJSPromise(context);

查看how promises are implemented,我们可以看到Promise解决方案链是作为一个简单的链表(强调我的链)实现的:

The PromiseReaction objects form a singly-linked list […]. On the JSPromise instance they are linked in reverse order,and are turned into the proper order again when scheduling them on the microtask queue.

简而言之,即使您不将Promises存储在变量中,V8也会将Promises绑定到执行上下文,并且Promise链被实现为链接列表,这意味着在Promise实际解决后,很容易进行追溯.

为了更全面地了解异步操作如何进行交互,请查看Javascript事件循环上的this video by Jake Archibald.

原文链接:https://www.f2er.com/js/531226.html

猜你在找的JavaScript相关文章