【发布时间】:2021-06-17 16:51:36
【问题描述】:
我想重构以下函数:
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()函数没有返回? -
@Barmar 你是对的,我已经插入了调用 getClient 函数的行
-
谢谢。我仍然没有看到重构版本的问题。应该初始化全局变量
-
@Barmar 函数没有返回,因为我运行的不是文件本身,而是导出的函数
标签: javascript node.js global-variables refactoring