【发布时间】:2019-11-10 16:26:30
【问题描述】:
我有一个具有这种结构的类:
class MyClass{
json;
constructor(){
}
}
我想将构造函数中的 API 请求中的“json”属性分配为数组。
我尝试了各种方法,甚至直接从其他论坛复制了代码 sn-ps。在调试器和console.log() 中,我已经确认我实际上得到了响应,并且在Promise.prototype.then() 中我能够使用结果。但我就是无法将它分配给类属性。
这些例子不起作用:
class MyClass{
json;
constructor(){
fetch(url)
.then(response => response.json())
.then(json => {
this.json = json; // I've tried using "self" when not using the "=>" operator
});
}
}
class MyClass{
json;
constructor(){
fetch(url)
.then(response => response.json())
.then(json => {
this._setJson(json);
});
}
_setJson(json){
this.json = json;
}
}
我也尝试过将json 初始化为一个数组并使用this.json.push(json) 或将json 作为一个对象返回。
一直以来this.json 从未被分配,我得到ReferenceError: json is not defined↵ at eval (...
我希望它被分配,但显然不是。 另外,如果这有什么不同,我正在使用 Chrome 75。 - 谢谢
【问题讨论】:
-
您如何以及何时访问/使用
json?考虑到该属性只有在请求完成后才会有值。 -
该类的数据至关重要。我想稍后在构造函数以及其他方法中使用它。我尝试过使用
async和await关键字,但我会首先承认我并不完全理解它们的含义。 -
我建议你不要在类构造函数中执行异步任务。如果您要获取的数据对类至关重要,我会在类之外获取它,一旦数据可用,就创建一个类的实例,将数据传递给它。
asnyc和await使您的代码看起来是同步的并且更易于阅读,但代码仍然是异步的,因此您将面临同样的问题。 -
谢谢,我看看结果如何。
-
是的,我很确定这是同步问题。当我从控制台访问该对象的方法时 - 在一切都运行之后 - 我得到
json填充。
标签: javascript json promise fetch