提问人:user3774763 提问时间:11/15/2023 最后编辑:MoxxiManagarmuser3774763 更新时间:11/15/2023 访问量:35
异步内部的函数返回为未定义:Angular
function inside async returning as undefined: Angular
问:
我正在尝试使用 SSE 订阅 API 调用,
addAsArray(message){
array.push(message)
}
上交所的调用:
let src = fetchEventSource('api link', {
method: 'POST',
...
async onmessage(e){
if(e.text.includes('[END]')){
this.addAsArray(e.text)
}
}
但是,我收到此错误:TypeError: Cannot read properties of undefined (reading 'addAsArray')
我知道异步函数可能需要,因此我尝试这样做await
async addAsArray(message){
array.push(message)
}
上交所的调用:
let src = fetchEventSource('api link', {
method: 'POST',
...
async onmessage(e){
if(e.text.includes('[END]')){
await this.addAsArray(e.text)
}
}
但是,我仍然收到相同的错误。我在这里做错了什么?
答:
1赞
Den
11/15/2023
#1
在您的例子中,onmessage 函数中的这个似乎是未定义的。这是因为 onmessage 函数创建自己的上下文,而该函数内部的上下文不引用外部作用域。
解决此问题的一种方法是为 onmessage 使用箭头函数,该函数没有自己的 this,并将从父作用域继承它。以下是修改代码的方法:
let src = fetchEventSource('api link', {
method: 'POST',
...
onmessage: async (e) => {
if(e.text.includes('[END]')){
this.addAsArray(e.text)
}
}
});
评论