如何修复未捕获(在承诺中)TypeError:无法设置未定义的属性
2021-01-19
20211
当我想将 API 结果中的值发送到数据时出现错误,错误如下
Uncaught (in promise) TypeError: Cannot set property 'notification' of undefined at eval (HeaderPortal.vue?070f:367)
这是我的
HeaderPortal.vue
data() {
return {
notification: []
}
}
mounted: {
const res = this.GET('/api/v2/notification', 'BEARER', null).then(function(res) {
console.log(JSON.parse(res))
this.notification = JSON.parse(res);
});
}
this.GET 来自这里
methods: {
async GET(url, headers, callback) {
const options = headers === 'BASIC' ? HEADERS_BASIC : HEADERS_BEARER;
try {
const response = await axios.get(`${BASE_URL}${url}`, options);
return (JSON.stringify(response));
} catch (e) {
console.error(e);
}
}
}
如何处理?我的代码有问题吗?
3个回答
如果您需要访问
this
关键字,请确保在回调中使用箭头函数
() => {
而不是常规函数
function() {
。如果不这样做,
this
关键字在您的情况下将为
undefined
。这就是您在第一个代码片段中尝试设置
this.notification = JSON.parse(res);
时出现错误的原因。
您的第一个代码片段有点奇怪,也许您忘记复制某些内容了?您的代码不应直接位于方法对象内。它应该位于已安装的钩子中,或者位于第二个代码片段中的正确方法中。
Florian Pallas
2021-01-19
答案不太清楚,让我举例说明一下:
data() {
return {
notification: []
}
}
methods: {
const res = this.GET('/api/v2/notification', 'BEARER', null).then( res => {
console.log(JSON.parse(res))
this.notification = JSON.parse(res);
});
}
希望有用
salvo720
2022-03-05
内部函数中的
this
仅引用该函数,因此不起作用。相反,请写:
s=this;
const res = this.GET('/api/v2/notification', 'BEARER', null).then(
function(res) {
console.log(JSON.parse(res))
s.notification = JSON.parse(res);
});
}
Siddharth Chauhan
2021-12-26