gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:56:58 25 4
gpt4 key购买 nike

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 ,它绑定(bind)到当前执行上下文,即使您没有将它存储在变量中也是如此。

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.

简而言之,即使您不将 Promise 存储在变量中,V8 也会将 Promise 绑定(bind)到执行上下文,并且 Promise 链是作为链表实现的,这意味着一旦 Promise 实际解决,就很容易追溯。


要更全面地了解异步操作如何相互交互,请查看 this video by Jake Archibald在 Javascript 事件循环上。

关于javascript - Promise Chaining 如何在内存中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com