Загрузка асинхронной функции в конструктор или ngOnInit - PullRequest
0 голосов
/ 20 января 2019

Я хочу вызвать асинхронную функцию readUsers () внутри конструктора или ngOnInit ().Хотя я использовал рекомендованный обходной путь отсюда, он все еще откладывается и не ожидает выполнения.

Асинхронные функции конструктора в TypeScript?

Как я могу отложить / подождать с выполнением моей функции readUsers ()?

users: any[];

ngOnInit() {
    this.readUsers();
    //this.readUsers(); above is called delayed so this.users below is 
    //undefined
    console.log(this.users);
}


public readUsers = async () =>  {
    this.users = await this.userService.getUsers()
    .then(resolve=>{
        console.log("within async function");
        return resolve;
    })
    .catch(reject=>{
        return [];
    })
}


////////userService.getUsers() reads JSON Object from an endpoint (works!)
getUsers(): Promise<any> {
    return new Promise((resolve, reject) => {
        this.http
            .get('https://url.com/users/')
            .subscribe(users => {
                if (!users) {
                    reject([]);
                }
                resolve(users);
            });
    });
}

Консоль.log переключается, так как нет ожидания:

undefined

в пределах асинхронной функции

1 Ответ

0 голосов
/ 20 января 2019
interface OnInit {
  ngOnInit(): void
}

Когда что-то возвращает пустоту, вы можете преобразовать его в Обещание без каких-либо побочных эффектов

async ngOnInit(): Promise<void> {
    await this.readUsers();
    console.log(this.users);
}
...