【发布时间】:2020-07-29 06:25:47
【问题描述】:
我是 TypeScript 的初学者,我不明白为什么我的变量响应仍然未定义,尽管我在我的 fetch 中分配了结果。
这是我的代码:
class UserInfoRepositoryInPeopleAPI implements UserInfoRepository {
private static response: Promise<any> | undefined = undefined;
constructor() {}
init = async (accessToken: string) => {
const headers = ...
const url = ...
const opts = ...
UserInfoRepositoryInPeopleAPI.response = (await fetch(url, opts)).json();
console.log('response? ', await UserInfoRepositoryInPeopleAPI.response);
};
getResponse = () => {
return UserInfoRepositoryInPeopleAPI.response;
};
}
然后,在另一个函数中,我做了:
const userInfo = new UserInfoRepositoryInPeopleAPI();
userinfo.init(my_access_token)
此时,它正在打印response? ...my_fetch_response...
所以它不是未定义的。
但是,当我接下来做的时候:
console.log('the response here will be undefined : ', (await getResponse()))
我明白了:the response here will be undefined : undefined
我做错了什么?
【问题讨论】:
-
如果静态字段是从实例方法填充的,我看不到使用它的意义。似乎错了。理想情况下,您要么使用静态方法来填充它,要么使用仅返回值而不填充字段的方法(静态或实例),或者使用实例方法和实例字段。
-
除此之外,当您说“此时,它正在打印”时,我怀疑您是否以正确的顺序运行操作。
init是异步的,因此它可能在之后 后者console.log运行。我认为不能保证两者会以正确的顺序运行 - 我建议链接到从init返回的承诺,或者使用await userinfo.init(my_access_token)并确保代码在解决之后运行。
标签: javascript typescript static fetch