gpt4 book ai didi

javascript - 关于上下文管理器的任何提示,类似于 Javascript 中的 Python?

转载 作者:行者123 更新时间:2023-12-04 11:36:07 24 4
gpt4 key购买 nike

我非常喜欢 Python 的上下文管理器,我不必担心之后如何获取或清理资源。有没有办法在Javascript中以一种简洁的方式做到这一点?

最佳答案

您可以使用 javascript 中的生成器函数进行类似的操作:

function* usingGroup() {
// setup
console.group()
try {
yield
} finally {
// cleanup
console.groupEnd()
}
}
要使用它,您可以使用 for ... of环形:
for(const _ of usingGroup()) {
console.log('inside a group')
}
此方法类似于您在 python 中使用 @contextmanager 定义上下文管理器的方式。装饰师。尽管在我看来,使用 for 循环来定义上下文应用的方式感觉很奇怪。
它是如何工作的:
抽象出整个生成器对象和迭代器协议(protocol),你可以认为它是这样做的:在循环的第一次迭代之前,生成器函数内部的代码一直运行到 yield。语句,此时,for循环体运行一次,因为生成器已经产生了一个值,在下一次迭代之前,生成器中的其余代码将运行。由于它没有产生,循环认为它完成并退出而不再次执行它的主体。 try ... finally确保即使抛出错误,代码也会被执行。
如果您需要在循环中使用某些值(例如您打开的文件),您可以 yield它在发电机内部。
完整代码:
function* usingGroup() {
console.group()
try {
yield
} finally {
console.groupEnd()
}
}

for(const _ of usingGroup()) {
console.log('inside a group')
}

关于javascript - 关于上下文管理器的任何提示,类似于 Javascript 中的 Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62879698/

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