https://tanutaran.medium.com/javascript-implement-timeout-to-promise-with-race-in-10-lines-and-common-misunderstanding-dc894f9d5abb