Показать сообщение отдельно
  #9 (permalink)  
Старый 01.03.2024, 09:20
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,230

Сообщение от Aetae
Никакой элегантности, левые не нужные таймеры...
Я не особо спец в написании классов...
Использую "функциональное" программирование. Стараюсь тренироваться по мере возможностей.

Такой вот еще вариант сделал, но там опять есть pause.

class DummyClient {
    async connect() {
        return new Promise(resolve=>{
            setTimeout(()=>{
                console.log('connect');
                resolve()
            }
            , 2000);
        }
        )
    }

    async doSomething() {
        console.log('done something')
    }
}

class ApiWrapper extends DummyClient {
	#connect = null
    async doSomething() {
		while (!this.#connect) {
			if (this.#connect == null) {
				this.#connect = false
				await this.connect()
				this.#connect = true
			}
			await this.pause(100)
		}
        await super.doSomething()
    }
	pause(t) {
		return new Promise(res => setTimeout(res, t))
	}
}

const run = async () => {
    const api = new ApiWrapper();

    await Promise.all([
		api.doSomething(), 
		api.doSomething(), 
		api.doSomething(), 
		api.doSomething()
	]);
}

run();
Ответить с цитированием