Не удалось вызвать переменную const из служебного файла в файл компонента - PullRequest
0 голосов
/ 02 апреля 2019

константная переменная не переназначается в методе, который я вызываю из компонента ngOnInit.

ec2.service.ts

private _status = false;

getStatus() {
    const params = {
        InstanceIds: [ 'i-xxxxxxxxxxxxxxx' ]
    };
    ec2.describeInstanceStatus(params, function(err, data) {
        if (err) {
            console.log(err, err.stack);
        } else {
            console.log(data);
            if (data.InstanceStatuses.length === 0) {
                this._status = true;
            }
        }
    });
    console.log(this._status);
    return this._status;
}

component.ts

constructor(public service: EC2Service) { }
ngOnit() {
    console.log(this.service.getStatus());
}

Здесь условие верно. Но он возвращает ложь, а не истину.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Ваш метод describeInstanceStatus выполняет асинхронную операцию. Чтобы получить результат асинхронной операции, вы можете использовать promise и async/await, как показано ниже

    getStatus() {
      return new Promise((resolve, reject) => {
      const params = {
            InstanceIds: [ 'i-xxxxxxxxxxxxxxx' ]
        };
          ec2.describeInstanceStatus(params, function(err, data) {
            if (err) {
               reject(err)
            } else {
                console.log(data);
                if (data.InstanceStatuses.length === 0) {
                   resolve(true)
                }
                reject(false)
            }
        });
    });
   }

component.ts

constructor(public service: EC2Service) { }
async ngOnit() {
    const result = await this.service.getStatus();
     console.log(result)
}
0 голосов
/ 02 апреля 2019

Поскольку ec2.describeInstanceStatus выполняет асинхронную операцию, необходимо дождаться ее завершения. Вы можете использовать async/await синтаксис.

И лучше использовать arrow function, чтобы не потерять область видимости в функции обратного вызова.

async getStatus() {
    const params = {
        InstanceIds: [ 'i-xxxxxxxxxxxxxxx' ]
    };
    await ec2.describeInstanceStatus(params, (err, data) => {
        if (err) {
            console.log(err, err.stack);
        } else {
            console.log(data);
            if (data.InstanceStatuses.length === 0) {
                this._status = true;
            }
        }
    });
    console.log(this._status);
    return this._status;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...