Вернуть массив после завершения цикла for в машинописи - PullRequest
0 голосов
/ 22 октября 2019

Я помещаю некоторые значения в массив, используя цикл for. Я хочу вернуть этот массив после завершения цикла for со всеми значениями, которые были переданы с использованием цикла for. Я вызываю эту функцию из какого-то другого кода. Но я получаю пустой массив. Я понимаю, что это связано с асинхронной функцией, но я не уверен, как это исправить.

 public async getNames() {
    let accounts: string[] = [];
    await this.waitForElementToBeVisible(this.eleNames.get(0));
    let num: number = await this.eleNames.count();
    for (let i: number = 0; i < num; i++) {
      console.log("inside for loop");
      await accounts.push(await this.eleNames.get(i).getText());
    }

    return accounts;
  }

и я вызываю этот getNames из другого кода, который находится ниже

     actualNames = await dashboardPage.getInstance.getNames();

, но возвращает пустой массив.

1 Ответ

0 голосов
/ 22 октября 2019

Попробуйте использовать код ниже Promise

public async getNames(): Promise<any> {

    return new Promise<any>( (resolve)=>{

        let accounts = [];
        await this.waitForElementToBeVisible(this.eleNames.get(0));
        let num: number = await this.eleNames.count();
        for (let i: number = 0; i < num; i++) {
          console.log("inside for loop");
          accounts = await this.addDataToAccounts(accounts, this.eleNames.get(i).getText());
        }

        resolve(accounts); // Use resolve instead of return for new Promise.
    })
}

Создайте новый метод addDataToAccounts для отправки данных в учетные записи и верните новый Promise, как показано ниже.

public addDataToAccounts(accounts: any, data: string): Promise<any> {

    return new Promise<any>( (resolve)=> {
        resolve(accounts.push(data));
    });
}

См. эта ссылка для получения дополнительной информации async awit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...