如果我有类似以下的课程:
export class ClassA{
static Alpha: string;
static Beta: string[];
constructor(jsonData: any){
ClassA.Alpha = jsonData.alpha;
ClassA.Beta = new Array<string>();
for(let i=0; i<jsonData.betaList.length; i++){
ClassA.Beta.push(jsonData.betaList[i]);
}
//do whatever it takes that takes a really long time
}
}
export function foo(list: string[]){
//something
}
当我编写如下代码时:
let dat = //whatever to parse a certain json file
new ClassA(dat);
foo(ClassA.Beta);
我想确保ClassA.Beta
的初始化在调用foo()
之前完成。可能吗?还是Typescript会自动处理这种情况吗?
答案 0 :(得分:3)
您可以确定在ClassA构造函数完成后将执行foo()。除非它使用任何类型的异步调用(Promises,setTimeout等)。
话虽如此,我认为目前的设计不是最好的设计。您是否真的想在每次调用构造函数时初始化类静态属性?
更好的方法是将单独的静态初始化逻辑放入Init()静态方法,并在应用程序的适当位置调用它:
export class ClassA{
static Alpha: string;
static Beta: string[];
public static Init(jsonData: any): void
{
ClassA.Alpha = jsonData.alpha;
ClassA.Beta = new Array<string>();
for(let i=0; i<jsonData.betaList.length; i++)
{
ClassA.Beta.push(jsonData.betaList[i]);
}
//do whatever it takes that takes a really long time
}
constructor()
{
//Initialize instance members here. Not static
}
}
export function foo(list: string[])
{
//something
}
let dat = {};//whatever to parse a certain json file
ClassA.Init(dat);
foo(ClassA.Beta);
这种方法将允许您稍后使Init()返回Promise,以便在需要时使代码异步。