提问者:小点点

Angular RxJs TypeError“未定义”


抱歉,如果这个问题没有意义,我对均值堆栈还是个新手。 我一直在尝试从一个express中间件中获取一个数组,以便在一个角形前端上显示。 我一直遇到的问题是,即使所有的东西都编译好了,而且看起来都能正常工作,但控制台中还是出现了一个错误:“错误类型错误:‘This.Brackets is undefined’”。

这就是出现问题的代码

'''

private brackets: Bracket[] = [];
private bracketsUpdated = new Subject<Bracket[]>();

constructor(private http: HttpClient) {}

getBracket() {
    this.http.get<{message: string, brackets: Bracket[]}>('http://localhost:3000/api/brackets')
    .subscribe((bracketData) => {
        this.brackets = bracketData.brackets;
        this.bracketsUpdated.next([...this.brackets]); // this is the problem line
    });
    console.log(this.brackets);
}

'''

这就是阵列的来源

'''

app.use("/api/brackets", (req, res, next)=>{
    const bracket= [
        {
            id: 'alksdfjalskj', 
            bracketTitle:'bracket from node', 
            bracketBuyIn: "2",
            bracketPlayer1:'name', 
            bracketPlayer2:'name2',
            bracketPlayer3:'name3',
            bracketPlayer4:'name4',
            bracketPlayer5:'name5',
            bracketPlayer6:'name6', 
            bracketPlayer7:'name7',
            bracketPlayer8:'name8'
        }
    ]; 
    console.log(bracket);
    res.status(200).json({
        message:'Bracket from node',
        bracket:bracket
    });
});

'''

在vs代码中,它是被定义的,所以我很困惑,为什么它不工作。


共1个答案

匿名用户

请求的执行需要时间,并且异步运行。 因此代码将继续运行,而不是等待请求完成。 这个概念对初学者来说很难理解。 您有两种可能:

  1. 处理订阅块中的结果('=>'运算符后的代码)
  2. 将整个函数声明为异步,并等待get请求的响应。 代码将等待请求完成。