Если вы делает запрос к серверу, то это асинхронный процесс, если вы ожидаете ввод пользователя - это асинхронный процесс. А при помощи setTimeout вы по сути имитируете какой-либо процесс, то есть после того как прошло 20 секунд, должно, что-то произойти. Поэтому всегда вставлять его не нужно, главное, чтобы внутри Promise была асинхронная операция, которая после завершения вызовет resolve или reject. Допустим вы загружаете изображения с другого сервака на свой и после того, как будут получены данные, вы вызываете resolve, а если оборвалось, то reject. Никакой setTimeout в данном случае не нужен. А если функция синхронная, тогда да, setTimeout нужен.