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

Предложу такой вариант...

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

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

class ApiWrapper {
    #client;
	#connect = false

    async getClient() {
		this.connect = true
		const client = new DummyClient();
		await client.connect();
		this.#client = client;
    }

    async doSomething(n) {
        while (!this.#client) {
			if (!this.connect) await this.getClient();
			await this.pause(100)
		}
		const v = await this.#client.doSomething();
		return v
    }
	pause(t) {
        return new Promise(resolve => {
            setTimeout(resolve, t);
        })
	}
}

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

    await Promise.all([
		api.doSomething(1), 
		api.doSomething(2), 
		api.doSomething(3), 
		api.doSomething(4)
	]);
}

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