TypeError: Невозможно прочитать свойство 'currentQuestions' из неопределенного в TypeScript - PullRequest
0 голосов
/ 31 марта 2019

У меня есть следующий код, и я пытаюсь получить некоторые данные из базы данных (которая кажется успешной, я попытался ее зарегистрировать), затем упорядочить эти данные и отправить массив в ответ.Мой класс:

export class Controller {

    currentQuestions: IQuestionArranged[] = []; // This should be my array that I am trying to send as response

    constructor(){ }

    public async startNewGame(req: express.Request, res: express.Response): Promise<void> {
        let factory: RepositoryFactory = new RepositoryFactory();
        let repository: RepositoryInterface = factory.createRepository();

        let questionsFetched: IQuestionFetched[] = await repository.fetchQuestions();    // array of questions as they were fetched
        // let currentQuestions: IQuestionArranged[] = []; // <<<<<

        // forEach through fetched questions to arrange them
        questionsFetched.forEach(currentQuestion => {
            // check if the current question already exists in the array
            if (this.currentQuestions.filter(e => e.id == currentQuestion.questionId).length != 0) {
                // if yes -> find the question and add the new answer with its id
                this.currentQuestions
                    .filter(e => e.id == currentQuestion.questionId)
                    .map(e => e.answers.push({
                        id: currentQuestion.answerId,
                        answer: currentQuestion.answer
                    }));
            } else {
                // if no -> add the new question with the new answer
                this.currentQuestions.push({
                    id: currentQuestion.questionId,
                    question: currentQuestion.question,
                    answers: [{
                        id: currentQuestion.answerId,
                        answer: currentQuestion.answer
                    }]
                });
            }
        });
        res.send(this.currentQuestions);
    }
}

Но я получил эту ошибку, которая говорит "UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство currentQuestions of undefined" (полное описание ошибки здесь ).Кажется, это работает нормально, если я использую локальную переменную (помеченную 5 стрелками влево в качестве комментария) вместо свойства класса, что заставляет меня думать, что я не использую ее должным образом, но я не знаю, где моя ошибка...

Ответы [ 2 ]

1 голос
/ 31 марта 2019

Можете ли вы попробовать функцию стрелки с выражением функции? Eg =>

public startNewGame = async (req: express.Request, res: express.Response) => {
 // Your code goes here.
}
0 голосов
/ 24 апреля 2019

Я нашел более чистое решение. То, что я должен был сделать, это связать «this»: «1001»

constructor() {
   this.startNewGame = this.startNewGame.bind(this);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...