Обещания изначально асинхронны, что означает, что самой ранней точкой, в которой будет выполняться обратный вызов, будет следующий тик события . Ваш цикл while выполняется на текущем тике события и не откажется от управления выполнением, пока не будет завершен. Он закончится только тогда, когда обещание разрешится, что может произойти только при следующем тике события, что не может произойти, пока не закончится ваш цикл;что никогда.
Нет никакого потока. Спит в JavaScript;Если вы хотите приостановить выполнение во время выполнения асинхронной операции, вам нужно поставить в очередь оставшуюся часть кода для выполнения после разрешения обещания.
Если вы посмотрите на спецификацию обещаний, возврат обещания из тогдашнего обратного вызова продлит время ожидания исходного обещания.
let p = getReposData(name, page_id).then(data => {
if (data.length === 0){
return;
}
return Promise.all(data.map(item=> createReposLink(item, parent_el)))
})