提问人:Aaron 提问时间:1/28/2022 最后编辑:ChrisAaron 更新时间:1/29/2022 访问量:121
如何避免闭包中布尔标志的突变?
How do I avoid mutation of a boolean flag in a closure?
问:
假设我在 TypeScript 中有这个函数,它使用闭包来管理状态:
- firebase 分析实例
- guid(用户 ID)。
该函数返回另一个函数,该函数接受 Firebase 方法的参数。我只想在 firebase 上设置一次用户 ID,所以我使用布尔标志来检查以前是否做过。logEvent
有没有办法在不改变变量的情况下做到这一点?或者有没有办法在没有需要突变的布尔标志的情况下实现这一点?guidSet
我知道,在像这样的小事情中,也许可读性超过了不改变变量的“教条”。此外,函数之外的任何事物都无法观察到这一事实使这种突变不那么“危险”,但无论如何,我感兴趣的是如何在不从技术上改变我的函数内的任何内容的情况下实现这一目标:guidSet
Logger
import analytics from "@react-native-firebase/analytics";
function Logger(): Function {
const analyticsInst = analytics();
let guidSet: boolean;
return (key: string, data?: any, guid?: string | null) => {
if (!guidSet && guid) {
guidSet = true;
analyticsInst.setUserId(guid);
}
analyticsInst.logEvent(key, data);
};
}
答:
0赞
Noob Life
1/28/2022
#1
这行得通吗?
import analytics from "@react-native-firebase/analytics";
function Logger(guid: string): Function {
const analyticsInst = analytics();
analyticsInst.setUserId(guid);
return (key: string, data?: any) => {
analyticsInst.logEvent(key, data);
};
}
评论
0赞
Aaron
1/28/2022
不,因为我不想在调用外部函数时设置 guid。
上一个:如何为数组中的每个索引执行函数?
下一个:从函数返回函数时出现作用域错误
评论
logEvent
setUserId
analyticsInst.setUserId
analyticsInst.logEvent
Logger
guidSet