当我想使用函数的返回值作为全局变量时,如何重构代码



我想重构以下函数:

export const getUserData = async (req: Request, res: Response) => {

const client = getClient()
const nameResult = await client.rpc.make('user/getName', user)
let nameStatus
if (!nameResult) {
// Throw error
} else {
// Do something useful
}
const isNice = await client.rpc.make('user/isNice', user);   
// ... Fetching various other data ...
}

我想得到关于获取用户名的全部内容,并想把它放在一个不同的函数中,这样我的getUserData函数将更具可读性。我正在做很多其他类似的事情,我希望每个人最终都能发挥自己的相应功能。所以我创建了我专用的getName函数:

const client = getClient()
const getName = async (user) => {
const nameResult = await client.rpc.make('user/getName', user)
let nameStatus
if (!nameResult) {
// Throw error
} else {
// Do something useful
}
return nameStatus
}
export const getUserData = async (req: Request, res: Response) => {
const nameStatus = await getName(user)
const isNice = await client.rpc.make('user/isNice', user);   
// ... Fetching various other data ...
}

现在我的目标实现了,我的getUserData函数更短了。但现在还有另一个问题。这两个功能都需要客户端。在重构之前,我在函数体中得到了它,所以没有问题。但现在我想把它当作一个全局变量来使用,而我的函数无法访问它。我的猜测是,getClient函数实际上从未运行过,因为我只是在从另一个文件使用这些函数时才调用我的getUserResult函数。当getClient调用在getUserData函数中时,它实际上被调用了,因为我从另一个文件调用了这个函数,但现在它只是全局存在,而从未运行过它。我如何创建一个全局客户端变量,以便在下面的所有函数中使用?

如果您的要求是每次在所有函数之前运行getClient函数,那么您可以将其转换为IIFE表达式,该表达式将自行调用。

最新更新