Класс - вернуть данные через await? - PullRequest
0 голосов
/ 19 января 2019

Я учусь использовать class с Async / Await.Я думаю, что я делаю что-то не так с функцией getData в классе Run.

При использовании await get() (эксперимент) он должен выдавать "Hello World".

Когда я запускаюсценария я получаю сообщение об ошибке:

UnhandledPromiseRejectionWarning: необработанное отклонение обещания.Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch ().(код отклонения: 1)

Сценарий класса:

class Run {
    constructor() {
        this.stop = false;
    }

    async getData(entry) {
        if (this.stop) {
            console.log("Stopped")
            return;
        }

        return await this.get();
    }

    async get() {
        return "Hello World";
    }

    stop() {
        this.stop = true;
    }
}

Использование:

let run =  new Run();

run.getData(async (entry) => { 
    console.log(entry);
});

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Ваш исходный код относится к другим методам, а не к вашему классу:

async getData(entry) {
    if (stop) {  // <--- this refers to this.stop() method
        console.log("Stopped")
        return;
    }

    return await get(); <--- this doesn't refer to your `this.get()` method
}

Итак, добавьте this., чтобы зафиксировать его в двух верхних позициях.

0 голосов
/ 19 января 2019

Вы получаете сообщение об ошибке, потому что забыли квалификатор this:

async getData(entry) {
    if (this.stop) {
        ^^^^

Использование return await имеет смысл только тогда, когда вы используете его в блоке try / catch. В противном случае он полностью избыточен.

Вы должны использовать это здесь вместо этого. Также getData не использует свой параметр entry. Вы должны позвонить прямо:

console.log(await run.getData());
            ^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...