Немного упростил, думаю так и понятней получилось с es6 и async\await
async function doRequest(urls){
var url = urls.shift();
if( ! url){
console.log("Все запросы выполнены");
//запускаем процесс который нужен после перебора всех элементов
}
//выполняем запрос который вернет промис
await getData(url); //запрос данных с сервера. getData(url) указан как пример
//ждем выполнения таймера
await new Promise(resolve => setTimeout(resolve, 1000)); //1000 - врем ожидания в ms
//рекурсивно запускаем функцию с обрезанным shift() массивом urls
await elevator(phIds);
}
//осталось запустить функцию передав массив
doRequest([
'http://google.com',
'http://ya.ru'
]);