Не удается получить доступ к переменным экземпляра Внутри методов Typescript | В нем говорится, что переменная недоступна

#typescript #class #scope #instance-variables #unreachable-code

Вопрос:

 class User {
    public pname: string;
    private ptoken: string;
    public token_status:boolean = false;

  

    public constructor(pname: string, ptoken: string) {
        this.pname = pname;
        this.ptoken = ptoken;
    }




    public Token_Valid() : Promise<token_format>{

        
        return new Promise((accept:any)=>{

            db.all("select * from `token` where `name` = $name and `token` = $token;",{$name:this.pname,$token:this.ptoken},(err:any,res:any)=>{
                if(res[0]){
                    accept(res[0]);
                }else{
                    accept({Error:'Person was not found, or token is incorrect soryy ...'})
                }
            });

            
        })

      
        this.token_status = true;

       

    }
 

Следующее сообщение выдается, когда я пытаюсь присвоить логическое значение в методе слишком верно

** Не мог бы кто-нибудь объяснить причину возникновения ошибки, а также как глобальные переменные работают в классах внутри Typescript / Javascript, как и на других языках, это не было бы проблемой **

Ответ №1:

Проблема здесь кажется довольно простой, вы возвращаете new Promise внутри Token_Valid() метода, но устанавливаете this.token_status после его возврата.

В JavaScript ничего нельзя сделать после return утверждения метода*, поэтому вы захотите преобразовать этот метод в любой:

  1. Установите переменную, прежде чем возвращать обещание,
  2. Сохраните значение обещания в качестве переменной, дождавшись его , затем установите this.token_status и верните ранее сохраненное значение.
  3. Добавьте a .then() к возвращенному обещанию, которое принимает значение (возвращенное из созданного обещания), которое изменяет значение this.token_status , а затем возвращает значение, которое оно приняло.

*если вы не используете try { ... } finally { ... } блок.

Комментарии:

1. Спасибо за помощь и объяснение, Крис !