我从npm导入了一个库,其中的某些部分需要在使用之前进行初始化,这是库中代码的简化版本:
export let locale = () => { throw new Error("Must init locale"); }
export initLocale(userLocaleFunction) {
locale = userLocaleFunction;
}
export checkLocale() {
console.log(locale());
}
但是以下列方式调用库时:
lib = require("lib");
lib.initLocale(() => { return "en" });
lib.checkLocale(); // works as expected: "en"
lib.locale(); // Throws "Must init locale";
lib.locale
的行为就像未初始化一样。我无法让initLocale()
返回语言环境,我需要它位于变量lib.locale
是否可以通过这种方式初始化变量?
答案 0 :(得分:0)
似乎在库中初始化变量时,它仅在库范围内。
在第一个解决方案中,我只返回了值:
export initLocale(userLocaleFunction) {
locale = userLocaleFunction;
return locale;
}
但是随后意识到这会带来一个新问题:如果在库中修改语言环境,或者更糟地在库之外修改语言环境,该怎么办?
本着避开两个事实来源的精神,我最终选择了这个:
locale = undefined;
export initLocale(userLocaleFunction) {
locale = userLocaleFunction;
}
export getLocale() {
if (locale === undefined) {
throw new Error("Uninitialized locale");
}
return locale;
}
此代码首先执行我需要进行的is initialized
检查,并提供具有真实性来源的值。