Как обращаться с asyn c по-разному? - PullRequest
0 голосов
/ 02 мая 2020

Это расширение еще одной проблемы, с которой я столкнулся с asyn c конструктором, который я решил.

Весь приведенный ниже код работает правильно.

Вот пример класса с асин c конструктор сортов. Я знаю, что в JavaScript нет такого понятия, как конструктор asyn c.

class loginPage {
    constructor(page) {
        return (async () => {
            this.singleElement = await page.$('.asd')
            this.arrayOfElements = await page.$('.qwe')
            return this
        })()
    }
}
module.exports = loginPage

Вот как я получаю доступ к элементам в конструкторе из другого файла.

const loginPage = async () => new (require('../loginPage.js'))(page)

Вот как я вызываю элементы, чтобы использовать их внутри функции asyn c.

(await loginPage()).singleElement
(await loginPage()).arrayOfElements[0]

Из-за асинхронности / ожидания я должен вызывать элементы как функции ().

Я хотел бы найти способ вызывать их как переменные.

Тогда мои вызовы элементов будут выглядеть так ->

await loginPage.singleElement
await loginPage.arrayOfElements[0]

Я знаю проблема в том, как я делаю строку «require».

Я попытался обернуть весь код в файле, как это ->

(async () => {
    const loginPage = new (require('../loginPage.js')(page)
})()

, чтобы переместить асин c до уровня, чтобы я мог называть элементы переменными.

Казалось, что это работает, пока я не запустил код.

Я получаю ошибки, связанные с "(page)" он проходит через строку "require".

Кажется, он не проходит должным образом, "(page)" больше.

"(page)" оказывается неопределенным o r Ни один из методов, таких как «page. $», неизвестен.

Я также пытался переместить «new» обратно в файл класса.

Я просто не могу заставить это работать как переменная ???

Любые идентификаторы?

...