gpt4 book ai didi

javascript - 即使抛出错误,也要访问函数中的所有变量?

转载 作者:行者123 更新时间:2023-12-03 08:52:43 25 4
gpt4 key购买 nike

下面我有一个main函数。此函数还声明了许多其他变量,并运行许多函数。如果函数内发生错误,我可以捕获此错误,但是在捕获内,我没有main函数的值。我正在寻找一种方法,即使抛出错误也可以访问所有变量。

export async function main ({alpha, beta, gamma}) {
let one = await doSomething(alpha)
let two = await doSomethingElse(one, beta)
return {one, two}
}

export async function store (db) {
await db.insert(data)
}

export async function usage (db, data) {
try {
let operation = await main(data)
await store (db, operation)
return operation
} catch (e) {
// here we don't have access to operation variables :(
await store(db, {}, e.message)
throw e
}
}

我发现做到这一点的唯一合理的方法是创建一个类,其中 main函数中的每个值。
import { get } from 'lodash'

export class Operation () {
constructor(db){
this.db = db
}
main({alpha, beta, gamma}) {
this.one = await doSomething(alpha)
this.two = await doSomethingElse(one, beta)
return {one: this.one, two: this.two}
}
init(data) {
try {
let main = await this.main(data)
await this.store(main)
return main
} catch (e) {
await this.store()
throw e
}
}
store(data = {}, errorMessage) {
if (!data.one) data.one = get(this, 'one') || null
if (!data.two) data.two = get(this, 'two') || null
if (errorMessage) data.errMessage = errorMessage
return await this.db.insert(data)
}
}

即使抛出错误,如何访问函数中的所有变量?

最佳答案

一种简单的解决方案是使用var声明一个函数范围的变量,而不是作用域为let块的变量。

但是,您实际上应该只使用两个try/catch语句,因为您正试图捕获两个不同的错误并以不同的方式处理它们:

try {
let operation = await main(data)
try {
await store (db, operation)
} catch(e) {
// here we do have access to the `operation` variable :)
}
return operation
} catch (e) { // failed to create operation (or the inner catch did rethrow)
await store(db, {}, e.message)
throw e
}

关于javascript - 即使抛出错误,也要访问函数中的所有变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36920468/

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