Я думаю, что функция settimeout работает асинхронно, поэтому цепочка обещаний будет продолжена после того, как вы запустите settimeout. Так что как-то вам нужно дождаться установленного времени ожидания - пытались ли вы обернуть его в обещание, а затем вернуть обещание?
return new Promise((resolve, reject) => {
setTimeout(async () => {
await this.app.client.windowByIndex(0); //I'm not even sure you need to await this
resolve();
}, 3000);
});